原版01背包:
for(i=1;i<=m;i++)
for(j=t;j>=c[i];j--)
f[j]=max(f[j],f[j-c[i]]+v[i]);//c:体积 v:价值
我按照题解所说,令c[i]=b[i],v[i]=a[i]-b[i]*mid,然后跑原版背包,wa..
题解中的写法:
for(i=1;i<=w;i++) f[i]=-1e9+7;
for(int i=1;i<=n;i++)
for(int j=w;j>=0;j--)
if(f[j]!=-1e9+7)
{
int k=min(j+b[i],w);
f[k]=max(f[k],f[j]+a[i]-(long long)b[i]*z);
}
return f[w]>=0;
???