这题和01背包最大的区别在于它没有价值,所以我们可以人工给它赋一个价值,由于要求体积最大,把价值赋成体积即可。顺带一提,这题数据范围很大,二维会MLE,要压缩成一维才可以AC
下面给出参考程序:
1 #include<iostream> 2 using namespace std; 3 int n,m,f[100001],v[100001],w[100001]; 4 int main() 5 { 6 cin>>n>>m; 7 for(int i=1;i<=m;i++) 8 { 9 cin>>v[i]; 10 w[i]=v[i]; 11 } 12 for(int i=1;i<=m;i++) 13 { 14 for(int j=n;j>=v[i];j--) 15 { 16 f[j]=max(f[j],f[j-v[i]]+w[i]); 17 } 18 } 19 cout<<f[n]; 20 return 0; 21 }