1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0
-45 32
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int cai[1100]; int dp[1100]; int main() { int n,m; int i,j,k; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) scanf("%d",&cai[i]); sort(cai+1,cai+1+n); scanf("%d",&m); if(m<5)//低于5元不能购买 { printf("%d\n",m); continue; } else { memset(dp,0,sizeof(dp)); m-=5;//取出5元用于购买最贵的 for(i=1;i<n;i++) for(j=m;j>=cai[i];j--) dp[j]=max(dp[j],dp[j-cai[i]]+cai[i]); printf("%d\n",m+5-dp[m]-cai[n]); } } return 0; }
原文:http://blog.csdn.net/wangluoershixiong/article/details/41249083