HDU 2546 饭卡 题解(动态规划)
来源:互联网 发布:数控切割机套料软件 编辑:程序博客网 时间:2024/05/21 23:36
点击打开链接
Problem Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。
n=0表示数据结束。
第一行为正整数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<stdio.h>#include<iostream>#include<string>#include<string.h>#include<vector>#include<algorithm>#include<queue>#include<stack>#define nn 1100#define inff 0x3fffffff#define mod 1000000007#define eps 1e-9using namespace std;typedef long long LL;int n,m;int a[nn];bool dp[nn];int main(){ int i,j; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) { scanf("%d",&a[i]); } scanf("%d",&m); sort(a+1,a+n+1); memset(dp,false,sizeof(dp)); dp[m+50]=true; for(i=1;i<=n;i++) { for(j=0;j<=m+50;j++) { if(j+a[i]-50>=5&&j+a[i]<=m+50) dp[j]=dp[j+a[i]]?true:dp[j]; } } for(i=0;i<=m+50;i++) if(dp[i]) break; printf("%d\n",i-50); } return 0;}
0 0
- HDU 2546 饭卡 题解(动态规划)
- HDU 3535 AreYouBusy 题解(动态规划)
- hdu 2224 The shortest path 题解(动态规划)
- HDU 3236 Gift Hunting 题解(动态规划)
- [HDU- 2546] 饭卡(动态规划&&背包)
- 动态规划 HDU 2546 饭卡
- HDU 2546 饭卡 (动态规划01背包)
- HDU 2546:饭卡(动态规划:01背包)
- hdu 2546 饭卡-动态规划(基础中的基础题)
- HDU 2546—饭卡 动态规划入门
- hdu 2546 饭卡 动态规划 01背包
- hdu 2546 饭卡-动态规划01背包
- (题解)动态规划的目录
- 动态规划训练(1)题解
- 动态规划训练(3)题解
- HUST1380NumberPyramids题解动态规划
- 动态规划初级题解
- 动态规划中级题解
- ural 1142. Relations
- Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
- Java开发,AWT控件的中文显示成乱码的解决方法
- Win7vs2012新建MVC项目报错“mvc 无法初始化powershell主机”的解决办法
- OCP 1Z0 053 6
- HDU 2546 饭卡 题解(动态规划)
- hibernate4无法保存数据
- javase学习笔记------------数组
- 类模板的练习
- 网络基础 TCP协议(报文解析)
- Android - Fragment BackStack 清空
- 在Visual Studia2013中使用ASP.NET网站配置工具
- C++ Primer 第四版中文完整版 和答案完整版
- javase学习笔记---函数的重载