cdoj31-饭卡(card) (01背包)
http://acm.uestc.edu.cn/#/problem/show/31
饭卡(card)
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
Input
多组数据。对于每组数据:
- 第一行为正整数n,表示菜的数量。n≤1000。
- 第二行包括n个正整数,表示每种菜的价格。价格不超过50。
- 第三行包括一个正整数m,表示卡上的余额。m≤1000。
n=0表示数据结束。
Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
Sample input and output
Sample Input | Sample Output |
---|---|
1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0 |
-45 32 |
题解:01背包。单独取出序列中最大值,然后对剩下的数进行01背包,V为m-5,求得maxValue,最后与序列最大值做减法。
代码:
1 #include <fstream> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 6 using namespace std; 7 8 const int N=1005; 9 int n,v; 10 int a[N],dp[N]; 11 12 int main() 13 { 14 //freopen("D:\\input.in","r",stdin); 15 //freopen("D:\\output.out","w",stdout); 16 while(scanf("%d",&n),n){ 17 int m0=0,i0=0; 18 for(int i=0;i<n;i++){ 19 scanf("%d",&a[i]); 20 if(m0<a[i]) m0=a[i],i0=i; 21 } 22 scanf("%d",&v); 23 if(v<5){ 24 printf("%d\n",v); 25 continue; 26 } 27 v-=5; 28 memset(dp,0,sizeof(dp)); 29 for(int i=0;i<n;i++){ 30 if(i==i0) continue; 31 for(int j=v;j>=a[i];j--) 32 dp[j]=max(dp[j],dp[j-a[i]]+a[i]); 33 } 34 printf("%d\n",v+5-dp[v]-m0); 35 } 36 return 0; 37 }
cdoj31-饭卡(card) (01背包)相关推荐
- hdu 2546 饭卡【01背包】
题目链接:https://vjudge.net/contest/103424#problem/C 饭卡 Time Limit: 5000/ ...
- hdu 2546 饭卡(01背包)
题意:只要最后留下的钱够5元,就可以买下最贵的食物,使得余额最低,其他的钱的使用就是一个最大背包问题了. 代码: #include<iostream> #include<cstrin ...
- 【Cqupt热身赛】诡异的饭卡 【01背包、动态规划】
DescriptionDescriptionDescription 海女美术大学食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于555元,就一定可以购 ...
- HDOJ 2546饭卡(01背包问题)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如 ...
- UESTC 31 饭卡 card
dp,答案容易想到是 凑出价格总和≤m-5 + 没被使用的最大价格. dp[i = 前i种价格][j = 价格总和] = 最大没使用的价格下标idx_m. dp[i-1][j]存在的话,则只要更新id ...
- uestc 1012 饭卡
饭卡(card) Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 253 Tried: 2169 Submit Status Best Solut ...
- HDU 2546 饭卡(01背包裸题)
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- 【HDU - 2546】饭卡 (dp,0-1背包,贪心思想)
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...
- 饭卡问题(0-1背包的变形)
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...
最新文章
- BZOJ Tyvj 1729 文艺平衡树
- Android 中文api (88)——SharedPreferences
- 计算机显卡敀主要性能参数,显卡性能看什么参数(新手必备的显卡性能知识全解)...
- Python编程基础:第四十六节 super函数Super Function
- 范数和机器学习中的范数
- python杂记-RSA加解密实现(2)
- 内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0
- 查询已有链表的hashmap_原创 | 面试不再慌,看完这篇保证让你写HashMap跟玩一样...
- 太赞了!刷题PDF终于在GitHub上开源了!覆盖字节、蚂蚁、腾讯等多家大厂真题...
- Python分析「我们为什么这么穷」
- JSP和Servlet相同点和不同点?
- 《Linux编程》上机作业 ·003【Shell编程】
- 【java学习之路】(java框架)008.JdbcTemplate
- Eclipse 创建自己的Wokspace和C++ Project
- 数的计数【Noip2001】
- Mysql查询结果导出为Excel的几种方法
- mac安装linux 键盘不能用了,Parallels Desktop 9在Mac虚拟机安装Linux Ubuntu系统
- 分布式服务架构原理、设计
- 用IE浏览器打开网址https显示不能访问怎么办
- MVDR最小方差无畸形相应波束形成器 Python 实现