题意:中文的吧,飘过~

析:学过DP的都应该感觉到是动态规划吧,就是一个01背包问题,不同的是,这个题又加入一些新的条件,就是不满5元不能消费,过了5元即使超了也行(这个学校真不错,都可以预支),最后让你求剩下最少的金额(可以是负的),根据贪心我们应该知道最后一个买最贵的,为什么呢,如果在前面就先取了最贵的,那么剩余金额到快接近或者等于为5元时,然后再买一个肯定比不上,最后快接近或者等于5元时,再买那个最贵的剩下的少,当然还有一种情况就是买完所有的东西后,仍然大于或者等于5元,那么最后买最贵的和不是最后买结果是一样的,综上,我们应该最后买那个最贵的。

所以我们就先取出来5元,相当于是在m-5的背包中装物品,使其最大,后面就很easy了。

代码如下:

#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <queue>
#include <iomanip>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <map>
#include <list> using namespace std;
typedef long long LL;
const int maxn = 1000 + 10;
int a[maxn], d[maxn]; int main(){
int n, m;
while(scanf("%d", &n), n){
int maxnn = -1, indx;
for(int i = 1; i <= n; ++i){
scanf("%d", &a[i]);
if(maxnn < a[i]){ maxnn = a[i]; indx = i; } //找一下最大的价格,最后再减掉
}
scanf("%d", &m); if(m < 5){ printf("%d\n", m); continue; } //小于5,都不花费,直接输出结果
memset(d, 0, sizeof(d));
for(int i = 1; i <= n; ++i){
if(i == indx) continue;
for(int j = m-5; j >= a[i]; --j) //保证最后价格大于等于5
d[j] = max(d[j], d[j-a[i]] + a[i]); //01背包
} printf("%d\n", m-d[m-5]-a[indx]);
}
return 0;
}

HDU 2546 饭卡 (01背包问题)的更多相关文章

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

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

  2. HDU 2546 饭卡(01 背包)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路:需要首先处理一下的的01背包,当饭卡余额大于等于5时,是什么都能买的,所以题目要饭卡余额最小, ...

  3. HDU -2546饭卡(01背包+贪心)

    这道题有个小小的坎,就是低于5块不能选,大于5块,可以任意选,所以就在初始条件判断一下剩余钱数,然后如果大于5的话,这时候就要用到贪心的思想,只要大于等于5,先找最大的那个,然后剩下的再去用背包去选择 ...

  4. hdu 2546 饭卡 01背包

    先将前n-1个从小到大排序.对m-5进行01背包.然后答案就是m-dp[m-5]-a[n-1] 至于为什么最后减去最贵的菜品,而不是把最贵的菜品也放到01背包里呢, 由于假设能够把最贵菜品a[n-1] ...

  5. HDU 2546 饭卡 01背包变形

    题目大意:中文题就不多说了 题目思路:由题意可知,只要高于5元,就可以随便刷,那我们就把最贵的留在最后刷.但是如果低于5元就什么也不能刷(哪怕你要买的物品价格不足五元),所以我们可以先求出(n-5)元 ...

  6. HDOJ(HDU).2546 饭卡(DP 01背包)

    HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...

  7. HDU 2546 饭卡(01背包)

    题目代号:HDU 2546 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/ ...

  8. 动态规划专题 01背包问题详解 HDU 2546 饭卡

    我以此题为例,详细分析01背包问题,希望该题能够为大家对01背包问题的理解有所帮助,对这篇博文有什么问题可以向我提问,一同进步^_^ 饭卡 Time Limit: 5000/1000 MS (Java ...

  9. hdu 2546 饭卡【01背包】

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

随机推荐

  1. OTS parsing error: invalid version tag woff和ttf文件被Filter拦截

    从服务器下载的字体文件放在本地,执行无法展示iconfont,浏览器控制台报出 Failed to decode downloaded font: http://127.0.0.1:8080/mhr/ ...

  2. WP8.1 控件默认字体颜色 配置文件位置

    C:\Program Files (x86)\Windows Phone Kits\8.1\Include\abi\Xaml\Design\generic.xaml 可在App.xaml文件中over ...

  3. c++ vector, 迭代器

    现代c++尽量使用vector(容器)和迭代器(相当于指针),少使用数组和指针,除非对程序执行效率有很高的要求. 容器优点,易于扩展,可通过push_back方法动态添加元素,数组不能动态添加元素. ...

  4. node 的exports 和module

    文件05/** * Created by Mr.tiankong on 2017/3/24. */var People = require("./test/people.js"); ...

  5. python HttpServer共享文件

    在目录下运行 python -m SimpleHTTPServer python -m http.server 启动服务器.

  6. 锋利的BFC

    在初学前端的时候,我们会经常碰到各种各样的布局问题,尤其当使用浮动的时候,然而学习了BFC之后,其中的一些怪异现象,也因此成为理所当然,会有一种拨开云雾的快感. 下面简单介绍下BFC,究竟什么是BFC ...

  7. Spring MVC 接受的请求参数

    目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...

  8. DataType 数据类型

    基本类型:四类八种:数值 : 整数:byte,short,int,long.默认是 int 小数:float,double                  默认是 double 布尔:boolean ...

  9. Android图形动画

    一.动画基础 本质 每帧绘制不同的内容. 基本过程 开始动画后,调用View的invalidate触发重绘.重绘后检查动画是否停止,若未停止则继续调用invalidate触发下一帧(下一次重绘),直到 ...

  10. 大型运输行业实战_day04_1_搭建ssm框架最容易犯的错误

    错误1.MapperScannerConfigurer中应该去扫描包,而不是接口 如果出现上述错误,报错如下,注意我们在看报错日志的时候一点要从 后往前看 错误2.没有配置别名,又要使用别名 命名不规 ...