电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。

n=0表示数据结束。
Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
Sample Input
1
50
5
10
1 2 3 2 1 1 2 3 2 1
50
0
Sample Output
-45
32

一道很巧妙的动态规划,题目里有一个隐含的意思,最贵的菜应该在你的价钱最接近5的时候买,这样才能出现最小的余额。所以我们不妨先把5拿出来,那么剩下的就是一个典型的01背包问题,用dp数组记录剩余余额为j时的花费,在找完所有情况后,再把这个5用来买最贵的菜,这样就得到了最小的余额。

AC代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int num[1005];
int dp[1005];
int n,sum;
int main()
{while(scanf("%d",&n)&&n!=0){memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++)cin>>num[i];cin>>sum;sort(num+1,num+n+1);if(sum<5)cout<<sum<<endl;else{sum-=5;for(int i=1;i<=n-1;i++)for(int j=sum;j>=num[i];j--)dp[j]=max(dp[j],dp[j-num[i]]+num[i]);cout<<sum+5-dp[sum]-num[n]<<endl;}      }return 0;
}

饭卡 01背包 DP相关推荐

  1. HDU 2546 饭卡(01背包裸题)

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. HDU 2546 饭卡 01背包变形

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  3. HDU -2546饭卡(01背包+贪心)

    这道题有个小小的坎,就是低于5块不能选,大于5块,可以任意选,所以就在初始条件判断一下剩余钱数,然后如果大于5的话,这时候就要用到贪心的思想,只要大于等于5,先找最大的那个,然后剩下的再去用背包去选择 ...

  4. HDU 2546 饭卡(贪心+DP)

    题目链接 几个月之前做的一个题了,开始想时就看出应该是个01背包问题,又发现不太一样,貌似应该是有种贪心策略,把最大的挑出来最后还有5块钱的再买,剩下的体积用01背包去求最优选择,当时WA了3次,以为 ...

  5. UVA 10163 Storage Keepers (01背包DP + 二分)

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  6. hdu 1864 最大报销额01背包dp

     最大报销额 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Subm ...

  7. ZOJ 3703 Happy Programming Contest 0-1背包 DP

    ZOJ 3703 Happy Programming Contest 题目描述: 题目链接:ZOJ 3703 Happy Programming Contest 题目大意: 这是一道虐狗的题目.讲的是 ...

  8. 51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划

    有一个箱子容量为 V(正整数,0<=V<=20000),同时有 n 个物品(0<n<=30),每个物品有一个体积(正整数). 现在在 n 个物品中,任取若干个装入箱内,使得箱子 ...

  9. POJ1015-Jury Compromise【01背包,dp】

    正题 题目链接:http://poj.org/problem?id=1015 题目大意 每个人有A值和B值,要求选M个人,使这M个人的|SumA−SumB||SumA−SumB||Sum_A-Sum_ ...

最新文章

  1. 分享一个 markdown 编辑器 - Mditor
  2. JVM中垃圾收集算法
  3. java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)
  4. 《openssl 编程》之 DH
  5. Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
  6. 超简单:解析 yml 类型(application.yml)配置文件 、springboot 工程读取 yml 文件中的值
  7. django目录介绍
  8. CopyTranslator v0.0.8 Zouwu RC1 发布
  9. SQL2000置疑数据库修复
  10. 使用WebStorm开发web前端 网页中文乱码问题的解决方案
  11. pe中怎么卸载服务器系统更新,方法四: 使用专用工具卸载系统更新补丁(和方法三类同...
  12. JanusGraph 创建索引步骤
  13. GOP和帧率、码率的关系
  14. 【最新】报表开发工具-->FineBI安装与启动---Windows
  15. 如何用VB编写FLASH动画播放器
  16. 苹果2014WWDC亮点之个人浅见
  17. 2014年届校招江苏银行苏州分行,工商银行苏州分行,农商行计算机岗面试经验
  18. ASCLL字母表顺序
  19. 普元软件工作环境大揭秘
  20. 领导者-追随者模型介绍

热门文章

  1. [JavaScript]JavaScript处理iframe的动作
  2. nginx上传目录配置,禁止执行权限
  3. (转)函数式编程实战教程(Python版)
  4. 常用数据库学习资源站点
  5. 【加密解密】密码学学习
  6. 扩展卢卡斯定理(Exlucas)
  7. Linux基本命令总结(六)
  8. 关于c3p0连接池连接mysql数据库需要注意的几点
  9. 结对项目--地铁出行路线规划程序(续)——附加题
  10. WMPLib.WindowsMediaPlayer 的用法