hdoj2456饭卡【01背包】

来源:互联网 发布:stm32用ucos还是linux 编辑:程序博客网 时间:2022/01/17 07:05

饭卡

Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 3   Accepted Submission(s) : 1
Problem Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
 

Input
多组数据。对于每组数据: 第一行为正整数n,表示菜的数量。n<=1000。 第二行包括n个正整数,表示每种菜的价格。价格不超过50。 第三行包括一个正整数m,表示卡上的余额。m<=1000。 n=0表示数据结束。
 

Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
 

Sample Input
1505101 2 3 2 1 1 2 3 2 1500
 

Sample Output
-4532
 
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;struct Node{int value;int wight;}A[1010];int dp[2010];bool cmp(Node a,Node b){return a.wight<b.wight;}int Max(int a,int b){return a>b?a:b;}int main(){int n,m,i,j;while(scanf("%d",&n),n){for(i=0;i<n;++i){scanf("%d",&A[i].value);A[i].wight=A[i].value;}scanf("%d",&m);if(m<5){printf("%d\n",m);continue;}stable_sort(A,A+n,cmp);memset(dp,0,sizeof(dp));for(i=0;i<n-1;++i){for(j=m-5;j>=A[i].wight;--j){dp[j]=Max(dp[j],dp[j-A[i].wight]+A[i].wight);}}printf("%d\n",m-dp[m-5]-A[n-1].wight);}return 0;}


0 0
原创粉丝点击
热门问题 编写一个应用程序绘制一个如下的操作菜单并实现功能(定义一个类学生表示学生,有成员变量姓名name和年 手机是现在人们必不可少、最重要的通讯工具,拥有一款简单、实用、易用的手机通讯录,将会使你的手机更加好 手机是现在人们必不可少、最重要的通讯工具,拥有一款简单、实用、易用的手机通讯录,将会使你的手机更加好 编写一个应用程序绘制一个如下的操作菜单并实现功能(定义一个类学生表示学生,有成员变量姓名name和年 平坦衰落信道 平坦衰落信道2FSK差错性能分析 1204:剔除相关数 Minecraft 编写一个应用程序绘制一个如下的操作菜单并实现功能(定义一个类学生表示学生,有成员变量姓名name和年 2023 分手后怎么和好 分手后和好的句子 分手了还能和好吗 分手怎么和好 和女朋友和好的话 怎么劝夫妻和好 劝夫妻和好的句子 前女友想和好 劝人和好的话 坏女人和好女人 和朋友和好的句子 和好如初的意思 赞美诗歌和好 好开头和好结尾 和好如初意思 和好信怎么写 和朋友和好的话 和好的面怎么保存 万和好还是万家乐好 和好书交朋友 万家乐好还是万和好 好词和好句 和好用英语怎么说 和好书交朋友手抄报 梦见和前女友和好 梦见和前男友和好 情侣吵架怎么和好 梦到和前男友和好 梦见和前女友和好了 作文的好开头和好结尾 梦见跟前男友和好 梦见跟前女友和好 梦见和男朋友和好了 梦见和女朋友和好 唐澄第几集和陆子曰和好 情侣吵架后怎么和好 男生有下家还会和女生和好 和亲罪妃 妃英理和有希子汉化本 医妃难宠王爷和离吧 妃英理和有希子熟肉