//简单的01背包,可以参考饮食问题。(几乎一样,汗==) #include <stdio.h> int max(int a,int b) { if(a>b) return a; else return b; } int main() { int ca[31]={0}; int f[31][20001]; int i,r; int b; int up; scanf("%d%d",&up,&b); for(i=1;i<=b;i++) scanf("%d",&ca[i]); for(r=0;r<=up;r++) if(r<ca[1]) f[1][r]=0; else f[1][r]=ca[1]; for(i=2;i<=b;i++) for(r=0;r<=up;r++) { if(r<ca[i]) f[i][r]=f[i-1][r]; else f[i][r]=max(f[i-1][r],f[i-1][r-ca[i]]+ca[i]); } printf("%d",up-f[b][up]); return 0; }