头像

凝幽




离线:5天前


最近来访(2)
用户头像
啼莺修竹
用户头像
王大宝爱自由


凝幽
27天前

题目链接 https://www.acwing.com/problem/content/6/

我想的是线预处理出每个二进制位代表的数,然后再后面一个一个加起来判断是不是符合体积要求;不满足就恢复成上一步的体积,就这样进行dp最后的答案就是偏离了一些正确答案,大佬快救救TAT

错误的代码:

#include<iostream>
#include<cmath>
using namespace std;
const int N=99999;
 int n,val,w[N],vau[N],s[N];
long long int  qui[N];
long long int f[10000];
int pos=(int)log2(200000);
void init()
{
    qui[0]=1;
    pos+=2;
    for(int i=1;i<=pos;i++){
        qui[i]=qui[i-1]*2;
    }
}
int main()
{
    init();
   cin>>n>>val;
    for(int i=0;i<n;i++)
    {
        cin>>w[i]>>vau[i]>>s[i];
        for(int j=val;j>=0;j--)
        //for(int j=0;j<=val;j++)
        { 
            int room=0;
            for(int k=pos;k>=0;k--)
            {
                room+=qui[k]*w[i];
                if(j>=room)
                {
                    if(room/w[i]>s[i])
                  {
                    room-=qui[k]*w[i];
                    continue;
                  }
                     f[j]=max(f[j],f[j-room]+room/w[i]*vau[i]);
                }
                else room-=qui[k]*w[i];
            }
        }
    }
    cout<<f[val];
}



凝幽
3个月前
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=200010;
int n;
int b[N];

int main()
{
  int t;
  cin>>t;
  while(t--)
  {
      cin>>n;
      memset(b,0,(n+1)*4);
      for(int i=1;i<=n;i++)
      {
          int a ;
          scanf("%d",&a);
         int l=max(1,i-a+1),r=i;
         b[l]++;b[r+1]--;
      }
      for( int i=1;i<=n;i++)
      {
          b[i]+=b[i-1];
          printf("%d ",!!b[i]);
      }
      puts("");
     }
  return 0;
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~



凝幽
3个月前
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~



凝幽
4个月前

AcWing《蓝桥杯集训·每日一题》拼团优惠!https://www.acwing.com/activity/content/introduction/2869/group_buy/120808/



新鲜事 原文

凝幽
4个月前
AcWing《蓝桥杯集训·每日一题》拼团优惠!https://www.acwing.com/activity/content/introduction/2869/group_buy/120808/