转载请注明出处:http://blog.csdn.net/u012860063

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546

Problem 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

思路:

先把最贵的一种菜找到放在一边,用剩余金额减5的金钱去尽可能买 除掉最贵的菜后剩余的菜类(01-背包问题)!

最后再用余下的钱去买最贵的菜。

代码例如以下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define M 50047
int f[M],val[M];
int max(int a,int b)
{
if(a > b)
return a;
else
return b;
}
int main()
{
int n,m,i,j;
while(~scanf("%d",&n) && n)
{
memset(f,0,sizeof(f));
memset(val,0,sizeof(val));
for(i = 0 ; i < n ; i++)
{
scanf("%d",&val[i]);
}
sort(val,val+n);//排序后val[n-1]即为最贵的菜
scanf("%d",&m);
if(m < 5)
{
printf("%d\n",m);
continue;
}
for(i = 0 ; i < n-1 ; i++)//01-背包问题
{
for(j = m-5 ; j >= val[i]; j--)
{
f[j] = max(f[j],f[j-val[i]]+val[i]);
}
}
printf("%d\n",m-f[m-5]-val[n-1]);
}
return 0;
}

hdu2546 饭卡 01-背包问题的更多相关文章

  1. HDU2546:饭卡(01背包)

    HDU2546:饭卡 http://acm.hdu.edu.cn/showproblem.php?pid=2546 当我们遇到问题选择物体的价值和顺序相关时就需要,排完序后对其01处理.这题因为当我们 ...

  2. [HDU2546]饭卡<dp 01背包>

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 #题目描述: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前, ...

  3. hdu2546 饭卡

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

  4. hdu_2546_饭卡(01背包)

    题目连接:hdu_2546_饭卡 题意:中文,不解释 题解:先拿5元来买最贵的,最后就是一个01背包,这里也算用到贪心的思想 #include<bits/stdc++.h> #define ...

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

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

  6. HDU2546饭卡---(DP 经典背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory L ...

  7. HDU 2546 饭卡(01 背包)

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

  8. hdoj 2546 饭卡(0-1背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路分析:该问题为0-1背包问题的变形题:问题求余额最少,设开始的余额为V,则求得用V-5可以买 ...

  9. HDU2546 饭卡(背包)

    开始写成01背包的形式,求m元可买物品价值的最大值 dp[j] = max(dp[j], dp[j - pri[i]] + pri[i]) 结果为m - dp[m] 但后来发现是有问题的, 比如这组过 ...

随机推荐

  1. USACO 2.1 Sorting a Three-Valued Sequence

    Sorting a Three-Valued Sequence IOI'96 - Day 2 Sorting is one of the most frequently performed compu ...

  2. Centos6.5添加Epel和Remi源安装Lamp环境

    想搭建一个Lamp环境,因为编译安装太麻烦,对于我这样的新手来说,太过于复杂.而CentOS自带的Apache.MySql和PHP的版本都太低,不想用.上百度搜了一轮,原来可以通过添加Epel和Rem ...

  3. 2.linux系统命令详解

    1 shell shell:命令解释器,根据输入的命令执行相应命令. 1.1 shell家族 察看当前系统下有哪些shell: cat /etc/shells 察看当前系统正在使用的shell ech ...

  4. iis 部署

    配置错误1: 由于权限不足而无法读取配置文件 建立一个新用户,分配所有权限 http://blog.csdn.net/jaychouliyu/article/details/7237143 配置错误2 ...

  5. [转]SQL Server 数据库规范

    SQL Server 数据库规范 一. 命名规范常用对象命名规范,使用帕斯卡命名法(Pascal,单词首字母大写),统一使用英文. 1. 表.英文单数名词,尽量写完整单词名称一般不超过3个英文单词都可 ...

  6. Java 系列之spring学习--springmvc注解参数传递(六)

    一.绑定参数注解如下 @RequestParam     绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数或上传的文件. 它有三个属性:  value    用于设置参数名. defa ...

  7. 基于Socket的Winform例子

    一.直接上效果图 二.Socket握手 三.服务端 Thread threadWatch = null;// 负责监听客户端的线程 Socket socketWatch = null;// 负责监听客 ...

  8. PHP配置优化:php-fpm配置解读

    PHP-FPM是一个PHP FastCGI管理器,php-fpm.conf配置文件用于控制PHP-FPM管理进程的相关参数,比如工作子进程的数量.运行权限.监听端口.慢请求等等. 我们在编译安装PHP ...

  9. 获得IP地址中文

    string ipFilePath = @"~/App_Data/QQWry.dat"; QQWryLocator QQWry = new QQWryLocator(Server. ...

  10. DataReader相关知识点

    C#中提供的DataReader可以从数据库中每次提取一条数据. 1. 获取数据的方式[1]DataReader 为在线操作数据, DataReader会一直占用SqlConnection连接,在其获 ...