01背包的微变型
#include <bits/stdc++.h>
using namespace std;
const int N = 40,M = 2e4 +10;
int n,m;
int v[N],w[N];
int f[M];//因j=m,m<=2e4;
int main(){
scanf("%d",&m);
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%d",&v[i]);
}
for(int i = 1; i <= n; i++){
for(int j = m; j >= v[i]; j--){
f[j] = max(f[j],f[j - v[i]] + v[i]);//以物品的体积为其价值
}
}
printf("%d\n",m - f[m]);
return 0;
}