在练习求解蓝桥杯01背包问题,过程中有参考部分题解,但是代码通过的测试集只有60%,无法完全正确解决,想要问一下这个代码有什么问题吗?谢谢。
被注释掉的部分是我在看题解之前自己写的,更惨(;′⌒`)。
#include <iostream>
#include <algorithm>
using namespace std;
//int main()
//{
// // 请在此输入您的代码
// int total,N; //容量,每个物品只有一个
// cin >> total >> N;
// int a[2][1001]; // 体积 价值
// for(int i=0;i<N;i++)cin >> a[0][i] >> a[1][i];
// int m[1001];
// int x=0,a_max,max_pre;
// for(int i=0;i<(1<<N);i++){
// a_max=0,max_pre=0;
// for(int j=0;j<N;j++){
// if(i&(1<<j)){
// a_max+=a[0][j];
// max_pre+=a[1][j];
// }
// }
// if(a_max==total){
// m[x++]=max_pre;
// }
// }
// sort(m,m+x+1);
// cout << m[x] << endl;
// return 0;
//}
int main()
{
// 请在此输入您的代码
int total,N; //容量,每个物品只有一个
cin >> total >> N;
int w[1001],v[1001]; // 体积 价值
for(int i=1;i<N;i++)cin >> w[i] >> v[i];
int m[1001][1001];
for(int i=1;i<=N;i++){
for(int j=1;j<=total;j++){
if(w[i]>j)m[i][j]=m[i-1][j];
else m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]);
}
}
cout << m[N][total] << endl;
return 0;
}