hdoj 2546 饭卡 【01背包】

来源:互联网 发布:java equals方法实现 编辑:程序博客网 时间:2024/04/30 23:35

饭卡

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16638    Accepted Submission(s): 5790


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
 


 

题目解析:想要使卡上余额最少,得保证最后一次买的菜最贵,(前提是你在最后一次买菜时卡上的前要大于或等于5)。假设购买菜之前卡上余额为m,如果小于5元,那就不能买东西,所以卡里的钱不变;如果大于或等于5元,就用m-5表示可用余额u,先花可用余额,这样就保证了在最后一次买菜前,你还有不少于5元的钱,然后用这最后的钱去买最贵的菜,就能使余额最小了。(每买一个菜,在购买前都会先判断余额,不会出现一次买多个菜)。

 

代码:

 

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int sum[1010];//所能购买的最大价值;int price[1010];//每个菜的价钱;int main(){int t;int n,i,j;//n是菜的数量;int m,u;//卡上的余额,可用余额;while(scanf("%d",&n),n){memset(sum,0,sizeof(sum));//将sum数组初始化为0;for(i=0;i<n;i++){scanf("%d",&price[i]);}sort(price,price+n);//目的是找出最贵的菜,price[n-1]是最贵的菜;scanf("%d",&m);if(m<5)//余额小于5时跳出;{printf("%d\n",m);//因不能购买,所以卡里的钱不变;continue;}u=m-5;//可用余额,用可用余额去买除了最贵的菜的剩余的菜,能买多少就买多少。for(i=0;i<n-1;i++)//(0----n-2)//除去最贵的菜的所有菜; {for(j=u;j>=price[i];j--){sum[j]=max(sum[j],sum[j-price[i]]+price[i]);//保证在余额不少于5的情况下购买最大价值。 }}        //运算到这里,我们已经求出可用余额u所能购买的最大价值sum[u]。接下//来卡里至少还有5元,而我们最贵的菜还没有买,这是最后一次购买机会,//我们买最贵的菜,就能使卡里的余额最小了。printf("%d\n",m-sum[u]-price[n-1]);//可用余额买的最大价值(除去最大菜价),加上最大菜价就是余额能买到的最大价值,用余额m(最开始的余额)减去能买到的最大价值,卡里的余额就最小了; }return 0;}

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我的头发掉的很厉害怎么办 八个月宝宝头后面没头发怎么办 生完孩子掉头发很厉害怎么办 生完孩子后掉头发很厉害怎么办 头发又细又软又卷怎么办 后颈部没有头发掉光了想植发怎么办 头发掉的厉害怎么办怎么拯救掉头发 头发可以种植吗 如果是秃顶怎么办 染头发把手指甲染黑了怎么办 怀孕两个月下体流褐色分泌物怎么办 头发总是大把大把的得掉 怎么办 严重脱发怎么办去问南宁肤康 脱发严重怎么办去看南宁肤康 前额头发少怎么办 如何使头发增多 生完宝宝头发一把一把的掉怎么办 生完宝宝后头发掉的厉害怎么办 生完宝宝头发掉的厉害怎么办 生了小孩后头发掉很多怎么办 生了孩子头发掉的很厉害怎么办 母乳期头发掉的很厉害怎么办 宝宝吃母乳头发掉的厉害怎么办 头发油腻头皮屑多还掉头发怎么办 头发剪了中分刘海弯了怎么办 头发掉了长出来的头发很细怎么办? 头皮损伤毛囊怎么办还会长头发吗 一岁宝宝头发稀少怎么办能刮光头么 前编头发长了怎么办怎么梳理 九个月宝宝头发稀少不长怎么办 前牙吃饭咬合很深吃饭就痛怎么办 吃了甜的冷的就牙疼怎么办 吃热的凉的甜的牙疼怎么办 头发太细了想让头发变粗点怎么办 我的头发又少又很油该怎么办 头发油掉发头顶头发稀疏怎么办 我的头发天生就少又细怎么办 头发越来越少怎么办 用什么好呢 头发油掉头发怎么办吃什么药好 生完孩子三个月掉头发很厉害怎么办 电夹板夹头发现在掉头发怎么办 刚剪完的头发前面短后面长怎么办 头发太多太厚怎么办_百度经验