饭卡(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 饭卡相关推荐

  1. UESTC 31 饭卡 card

    dp,答案容易想到是 凑出价格总和≤m-5 + 没被使用的最大价格. dp[i = 前i种价格][j = 价格总和] = 最大没使用的价格下标idx_m. dp[i-1][j]存在的话,则只要更新id ...

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

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

  3. hduoj 2546饭卡

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

  4. HDOJ---2546 饭卡[DP01背包问题]

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

  5. HDU2546 饭卡【贪心+0-1背包】

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

  6. HDU 2546 饭卡 01背包变形

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

  7. Hdu 2546 饭卡

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

  8. hdu 2546 饭卡(01背包)

    题意:只要最后留下的钱够5元,就可以买下最贵的食物,使得余额最低,其他的钱的使用就是一个最大背包问题了. 代码: #include<iostream> #include<cstrin ...

  9. hdu 2546 饭卡【贪心+01背包基础题】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2546 http://acm.hust.edu.cn/vjudge/contest/view.action ...

最新文章

  1. 分布式图数据库在贝壳的应用实践
  2. Linux学习笔记-软件安装管理
  3. php批量生成产品编号:xxx.000001,并依次递增
  4. 空气动力学测试软件,山寨也精确 简单方法测试最佳空气动力学姿势(图文)
  5. 网站降权的原因以及恢复的方法 (二)
  6. java基础(十一) 枚举类型
  7. mysql 定义XML字段_MyBatis之基于XML的属性与列名映射
  8. IDEA创建Scala
  9. multism中ui和uo应该怎么表示_Excel中VBA程序基本语法之强大的数组,了解数组的功能...
  10. 计算机自动控制论文,电气自动化控制人工智能技术研究-人工智能论文-计算机论文.docx...
  11. ExoPlayer之SampleQueue
  12. time库:Python的时间时钟处理
  13. 【Python_010】利用python对excel进行去重
  14. Java入门第三季—简易扑克牌游戏
  15. python敏感字替换_python如何实现敏感词替换
  16. 中国商业环境发展的五个阶段浅析
  17. nRF24L01单芯片2.4GHz收发模块射频信道频率
  18. Windows10只关闭显卡驱动更新
  19. Valley Numer
  20. 使用studio 3T按日期查询mongodb

热门文章

  1. 2022-2028年中国橡胶履带产业发展动态及投资趋势预测报告
  2. Bert代码详解(一)重点详细
  3. LeetCode简单题之找出数组的最大公约数
  4. hexo框架个人博客的搭建(面试加分!)
  5. 编写可调模板并使用自动调谐器
  6. 智能驾驶开发的几个问题
  7. View的Touch事件分发(二.源码分析)
  8. 2021年大数据Hadoop(三十):Hadoop3.x的介绍
  9. Laravel和Thinkphp有什么区别,哪个框架好用
  10. [JS][dp]题解 | #打家劫舍(一)#