1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0
-45 32
一个背包问题。就是提前需要一个预处理。。找到价格最高的饭菜,花费五元买去它。
然后就编程了n-1个物品,m-5元钱的背包问题。。
#include <stdio.h> #include <string.h> int main() { int n,m,pri[1005],dp[1005]; while(scanf("%d",&n)&&n) { int max=0,mark; memset(dp,0,sizeof(dp)); memset(pri,0,sizeof(pri)); for(int i=0;i<n;i++) { scanf("%d",&pri[i]); if(pri[i]>max) max=pri[i],mark=i; } pri[mark]=0; scanf("%d",&m); m=m-5; int count=0; for(int i=0;i<n;i++) { for(int j=m;j>=pri[i];j--) { if(dp[j]<dp[j-pri[i]]+pri[i]) dp[j]=dp[j-pri[i]]+pri[i]; if(dp[j]>count) count=dp[j]; } } if(m>=0) printf("%d\n",m+5-count-max); else//如果钱不够5元 printf("%d\n",m+5); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/su20145104009/article/details/47445481