f[i]表示能否装出i这个体积。枚举即可。找到能装的最大合法体积。
#include<cstdio>
#include<cstring>
int v,n,volume[31];
bool f[20001];
int main(){
//freopen("a.in","r",stdin);
scanf("%d%d",&v,&n);
for(int i=1;i<=n;i++){
scanf("%d",&volume[i]);
}
memset(f,false,sizeof(f));
f[0]=true;
for(int i=1;i<=n;i++){
for(int k=v;k>=volume[i];k--){
f[k]=f[k]||f[k-volume[i]];
}
}
for(int i=v;i>=0;i--){
if(f[i]){
printf("%d",v-i);
break;
}
}
return 0;
}