uestc 1012 饭卡
饭卡(card)
Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 253 Tried: 2169
Submit
Status
Best Solution
Back
Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于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
// f[i][j] :前i个物品能否把空间j填满// f[i][j]=f[i][j]==1?f[i][j]:f[i-1][j-r[i]]// f[i][0]=1;解为 小于等于m-5的空间中 可以被填满的最大值 // 根据0,1 背包 这里可以利用滚动数组 所以将f降到1维// 把最大值单独提取出来、、剩余用来做0,1背包 为什么这样做是对的// 证明 : 假设 将最大值Max用来求0,1 背包, 则设比Max小的数在集合 s{..}中// 最后打的菜价为 P 则 sigma S{..}+Max+P 就是所花的钱。 m-sigma S{..}-Max-P就是饭卡最后剩下的钱// 若用P来代替 Max, Max代替P 则结果是一样的, 其中还有可能 P+T{..}=Max 这样的话 剩余的钱就是//m-sigma S{..}-Max-P-sigma T{..} 明显还更小、所以将最大的值用来当做最后一个菜来打肯定正确#include <iostream> #include <stdio.h> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <string.h> using namespace std; int r[1010]; int n,m; int f[1010]; int main() {while(scanf("%d",&n),n){int i,j;for(i=0;i<n;i++)scanf("%d",&r[i]);sort(r,r+n);scanf("%d",&m);if(m<5) { printf("%d\n",m);continue;}memset(f,0,sizeof(f));for(i=0;i<n-1;i++)for(j=m-5;j>=r[i];j--)if(j==r[i]) f[j]=1;elsef[j]=f[j]|f[j-r[i]];for(i=m-5;i>0;i--)if(f[i])break;printf("%d\n",m-r[n-1]-i);}return 0; }
转载于:https://www.cnblogs.com/372465774y/archive/2013/04/22/3036124.html
uestc 1012 饭卡相关推荐
- UESTC 31 饭卡 card
dp,答案容易想到是 凑出价格总和≤m-5 + 没被使用的最大价格. dp[i = 前i种价格][j = 价格总和] = 最大没使用的价格下标idx_m. dp[i-1][j]存在的话,则只要更新id ...
- HDU 2546 饭卡(01背包裸题)
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- hduoj 2546饭卡
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDOJ---2546 饭卡[DP01背包问题]
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU2546 饭卡【贪心+0-1背包】
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- HDU 2546 饭卡 01背包变形
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- Hdu 2546 饭卡
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- hdu 2546 饭卡(01背包)
题意:只要最后留下的钱够5元,就可以买下最贵的食物,使得余额最低,其他的钱的使用就是一个最大背包问题了. 代码: #include<iostream> #include<cstrin ...
- hdu 2546 饭卡【贪心+01背包基础题】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2546 http://acm.hust.edu.cn/vjudge/contest/view.action ...
最新文章
- 分布式图数据库在贝壳的应用实践
- Linux学习笔记-软件安装管理
- php批量生成产品编号:xxx.000001,并依次递增
- 空气动力学测试软件,山寨也精确 简单方法测试最佳空气动力学姿势(图文)
- 网站降权的原因以及恢复的方法 (二)
- java基础(十一) 枚举类型
- mysql 定义XML字段_MyBatis之基于XML的属性与列名映射
- IDEA创建Scala
- multism中ui和uo应该怎么表示_Excel中VBA程序基本语法之强大的数组,了解数组的功能...
- 计算机自动控制论文,电气自动化控制人工智能技术研究-人工智能论文-计算机论文.docx...
- ExoPlayer之SampleQueue
- time库:Python的时间时钟处理
- 【Python_010】利用python对excel进行去重
- Java入门第三季—简易扑克牌游戏
- python敏感字替换_python如何实现敏感词替换
- 中国商业环境发展的五个阶段浅析
- nRF24L01单芯片2.4GHz收发模块射频信道频率
- Windows10只关闭显卡驱动更新
- Valley Numer
- 使用studio 3T按日期查询mongodb
热门文章
- 2022-2028年中国橡胶履带产业发展动态及投资趋势预测报告
- Bert代码详解(一)重点详细
- LeetCode简单题之找出数组的最大公约数
- hexo框架个人博客的搭建(面试加分!)
- 编写可调模板并使用自动调谐器
- 智能驾驶开发的几个问题
- View的Touch事件分发(二.源码分析)
- 2021年大数据Hadoop(三十):Hadoop3.x的介绍
- Laravel和Thinkphp有什么区别,哪个框架好用
- [JS][dp]题解 | #打家劫舍(一)#