http://acm.uestc.edu.cn/#/problem/show/31

饭卡(card)

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit Status

电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于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背包)相关推荐

  1. hdu 2546 饭卡【01背包】

    题目链接:https://vjudge.net/contest/103424#problem/C 饭卡                                Time Limit: 5000/ ...

  2. hdu 2546 饭卡(01背包)

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

  3. 【Cqupt热身赛】诡异的饭卡 【01背包、动态规划】

    DescriptionDescriptionDescription 海女美术大学食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于555元,就一定可以购 ...

  4. HDOJ 2546饭卡(01背包问题)

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如 ...

  5. UESTC 31 饭卡 card

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

  6. uestc 1012 饭卡

    饭卡(card) Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 253 Tried: 2169 Submit Status Best Solut ...

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

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

  8. 【HDU - 2546】饭卡 (dp,0-1背包,贪心思想)

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

  9. 饭卡问题(0-1背包的变形)

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

最新文章

  1. BZOJ Tyvj 1729 文艺平衡树
  2. Android 中文api (88)——SharedPreferences
  3. 计算机显卡敀主要性能参数,显卡性能看什么参数(新手必备的显卡性能知识全解)...
  4. Python编程基础:第四十六节 super函数Super Function
  5. 范数和机器学习中的范数
  6. python杂记-RSA加解密实现(2)
  7. 内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0
  8. 查询已有链表的hashmap_原创 | 面试不再慌,看完这篇保证让你写HashMap跟玩一样...
  9. 太赞了!刷题PDF终于在GitHub上开源了!覆盖字节、蚂蚁、腾讯等多家大厂真题...
  10. Python分析「我们为什么这么穷」
  11. JSP和Servlet相同点和不同点?
  12. 《Linux编程》上机作业 ·003【Shell编程】
  13. 【java学习之路】(java框架)008.JdbcTemplate
  14. Eclipse 创建自己的Wokspace和C++ Project
  15. 数的计数【Noip2001】
  16. Mysql查询结果导出为Excel的几种方法
  17. mac安装linux 键盘不能用了,Parallels Desktop 9在Mac虚拟机安装Linux Ubuntu系统
  18. 分布式服务架构原理、设计
  19. 用IE浏览器打开网址https显示不能访问怎么办
  20. MVDR最小方差无畸形相应波束形成器 Python 实现

热门文章

  1. [ActiveRecord]之 CRUD
  2. 在线CSV转Excel工具
  3. 脱离标准文档流(1)---浮动
  4. centOS7忘记密码重置方法
  5. 小编带着小白看springboot源码2
  6. [FPGA] 2、新建并运行一个工程
  7. composer QA
  8. 接口可以继承多个接口总结
  9. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
  10. 【毕设】ASP.NET基于.NET的城市公交查询系统的设计与实现(源代码+论文)