http://www.vijos.cn/Problem_Show.asp?id=1133
#include < iostream >
using   namespace  std;
int  MIN( int  x, int  y)
{
    
if(x<y)
        
return x;
    
else
        
return y;
}

int  main()
{
    
int i,j,c,n;//c箱子容量,n表示物品数量
    while(cin>>c)
    
{
        
int v[31],dp[20001];//v[i]表示第i个物品的体积
        
//dp[j]表示容量为j时的最优值
        scanf("%d",&n);
        
for(i=1;i<=n;i++)
            scanf(
"%d",&v[i]);
        
for(j=0;j<v[1];j++)
            dp[j] 
= c;
        
for(;j<=c;j++)
            dp[j] 
= c-v[1];
        
for(i=2;i<=n;i++)
            
for(j=c;j>=v[i];j--)
                dp[j] 
= MIN(dp[j],dp[j-v[i]] - v[i]);
        cout
<<dp[c]<<endl;
    }

}