数组小了吧。
by Zerosking @ 2018-10-31 16:53:57
v最大可以到20000但是你的maxn只有1000
by Zerosking @ 2018-10-31 16:54:36
而且你这个1e3的定义会导致n=1000时越界
by Dog_Two @ 2018-10-31 17:07:34
```cpp
#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000007
using namespace std;
ll a[35],b[20055];
int main()
{
ll v,n;
scanf("%lld%lld",&v,&n);
for (ll i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
b[v]=1;
for (ll i=1;i<=n;i++)
{
for (ll j=1;j<=20000;j++)
{
if(b[j]==1)
{
if(j-a[i]>=0) b[j-a[i]]=1;
}
}
}
for (ll j=0;j<=200000;j++)
{
if(b[j]==1)
{
printf("%lld",j);
return 0;
}
}
return 0;
}
```
by lhjy666 @ 2018-10-31 17:09:22
@[Zerosking](/space/show?uid=112559) **改了一下数据大小,又AC了一个(还是才60分)**
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=2e5+1;
int v[maxn],box,num,f[101][maxn]={0};
int main()
{
cin>>box>>num;
for(int i=1;i<=num;i++)
{
cin>>v[i];
}
for(int i=1;i<=num;i++)
{
for(int j=box;j>=v[i];j--)
{
if(v[i]<=box)
{
f[i][j]=max(f[i-1][j-v[i]]+v[i],f[i-1][j]);
}
else
{
f[i][j]=f[i-1][j];
}
}
}
cout<<box-f[num][box];
return 0;
}
```
by stycycle @ 2018-10-31 17:15:06
@[星空_](/space/show?uid=88718) 好奇为什么要设二维背包。。
by Immortal_Bird @ 2019-03-03 14:38:36
@[星空_](/space/show?uid=88718) 砍掉一维,就是把f[i][j]的[i]去掉,不影响结果
by Immortal_Bird @ 2019-03-03 14:49:33