看了几个题解用f[i]表示容量i能装的最大重量
我的bool f[i]只用来判断取完后能不能剩下i这个值
然后判断i的最小值
这题这样就够了
结果第三个点wrong了
可能是很蠢的错误或我背包根本没懂
请大佬帮忙指出
#include<bits/stdc++.h>
using namespace std;
int v,n,a[61],b[20001],ma=0;
int main()
{
cin>>v>>n;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
b[v]=1;//初始值可以取并从它开始
for(int i=1;i<=n;i++)
{
cin>>a[i];
ma+=a[i];
}
if(ma<v)
{
cout<<v-ma;
return 0;
}/*这里是为了过自己加的(我当时以为我发现问题了又一想按理来说不需要这样,应该哪里错了*/
for(int i=1;i<=n;i++)
for(int j=a[i];j<=v;j++)
if(b[j])b[j-a[i]]=1;
for(int i=0;i<=n;i++)
if(b[i])
{
cout<<i;
return 0;
}
}
/*w的那组数据
in
90
12
3
7
4
5
13
2
8
4
7
6
5
7
out
19*/