二刷提高课,题解目录在这里— 提高课的题解目录
混合背包问题,我们对特定的背包进行特定的处理即可
但是这里如果全是多重背包可能会超时,所以需要使用优化
这里选择比较简单的二进制优化
#include<iostream>
using namespace std;
int f[1010];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int v,w,s;
cin>>v>>w>>s;
if(s==-1)
{
for(int j=m;j>=v;j--)
{
f[j]=max(f[j],f[j-v]+w);
}
}
else if(s==0)
{
for(int j=v;j<=m;j++)
f[j]=max(f[j],f[j-v]+w);
}
else
{
for(int k=1;k<=s;k*=2)
{
for(int j=m;j>=k*v;j--)
f[j]=max(f[j],f[j-k*v]+w*k);
s-=k;
}
if(s)
{
for(int j=m;j>=s*v;j--)f[j]=max(f[j],f[j-s*v]+w*s);
}
}
}
cout<<f[m];
return 0;
}
请问一下二维实现的代码是什么样子的啊,为什么这样一直WA啊