分析:每种菜仅仅可以购买一次,但是低于5元不可消费,求剩余金额的最小值问题。。其实也就是最接近5元(>=5)时, 购买还没有买过的蔡中最大值问题,当然还有一些临界情况

1、当余额充足时,可以随意购买菜,即∑p - max_p +5 <= m  时,re = m - ∑p

2、当余额不充足时,有一种特殊情况,不能消费的情况,即m<5时    re = m;

3、余额不足时,只能购买部分菜,转化成01背包问题,找出最接近最接近5的值,

状态转换方程:

f[0][P] = true;f[0][0..P-1]=false;

f[i][p] = f[i-1][p+pi]     如果i-1个菜后余额p+pi、 第 i 个菜后余额p

具体做法:先对菜价格从小到大排序,从前往后根据最有子结构求出各个菜(价格最大的max除外,因为结果一定会减去max值)余额剩余情况,找到最接近5的金额,减去max值就是最佳答案

//hdu 2546  典型01背包      288 KB    31 ms
#include<iostream>
#include<algorithm>
using namespace std;
bool my[];//统计余额情况
int main()
{
int n,c[],m;
while(cin >> n)
{
int i,j,k,s,re;
if(!n)break;
for(s=,i=; i<=n; i++)
{
cin >> c[i];s+=c[i];
}
sort(c+,c+n+);// 不包括c[n+1]
//for(i=1;i<=n;i++)cout << c[i];
cin >> m;
if(s-c[n] <= m- ) re = m-s;
else if(m < ) re = m;
else{//01背包
for(i=; i<=m; i++)my[i]=false;
my[m]=true;
for(i=; i<n; i++)
for(j=; j+c[i]<=m; j++)
if(my[j+c[i]])my[j]=true;
for(i=;i<=m;i++)
if(my[i])break;
re = i-c[n];
}
cout << re << endl;
}
return ;
}

hdu 2546 典型01背包的更多相关文章

  1. HDU 2546(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 http://blog.csdn.net/xujinsmile/article/details/79694 ...

  2. 2546 ACM 01背包

    题目http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路:再01背包的问题上稍作修改 如何满足 :卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购 ...

  3. ACM HDU Bone Collector 01背包

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 这是做的第一道01背包的题目.题目的大意是有n个物品,体积为v的背包.不断的放入物品,当然物品有 ...

  4. hdu 2955 Robberies (01背包)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 思路:一开始看急了,以为概率是直接相加的,wa了无数发,这道题目给的是被抓的概率,我们应该先求出总的 ...

  5. HDU 2639(01背包求第K大值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2639 Bone Collector II Time Limit: 5000/2000 MS (Jav ...

  6. hdu 3466 排序01背包

    也是好题,带限制的01背包,先排序,再背包 这题因为涉及到q,所以不能直接就01背包了.因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m], ...

  7. hdu 2955 Robberies 0-1背包/概率初始化

    /*Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  8. HDU 2639 (01背包第k优解)

    /* 01背包第k优解问题 f[i][j][k] 前i个物品体积为j的第k优解 对于每次的ij状态 记下之前的两种状态 i-1 j-w[i] (选i) i-1 j (不选i) 分别k个 然后归并排序并 ...

  9. HDU——2955 Robberies (0-1背包)

    题意:有N个银行,每抢一个银行,可以获得\(v_i\)的前,但是会有\(p_i\)的概率被抓.现在要把被抓概率控制在\(P\)之下,求最多能抢到多少钱. 分析:0-1背包的变形,把重量变成了概率,因为 ...

随机推荐

  1. vsftpd安装指南

    如果您用的是Fedora 或Redhat 系统,可以用下面的命令在线安装: [root@localhost ~]# yum install vsftpd 如果是debian 类系统,可以用apt 来在 ...

  2. javascript入门学习笔记2

    JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: 实例 var x // x 为 undefined var x = 6; // x 为数字 var x = "Bil ...

  3. 初学者自学笔记-this的用法

    请注意:这是自学者的笔记,只是个人理解,并非技术分享,如有错误请指正. "this"的意思,简单而言,就是"这个",也就是"当前".谁调用它 ...

  4. POJ 1185 炮兵阵地(动态规划+状态压缩)

    炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...

  5. phpmailer{群发并且发送附件}

    PHPMailer是一个用于发送电子邮件的PHP函数包. 第一,需要下载PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/     第二, ...

  6. thinkphp框架使用心得

    接触的第一个PHP框架就是TP,在使用的了一段时间后就放弃了,说实话TP的弊端挺多,之后又接触laravel框架,慢慢的就爱上laravel这个框架了.这段时间由于公司的原因,又不得不使用thinkp ...

  7. 【转】Eclipse工具使用技巧总结

    作者:Work Hard Work Smart 出处:http://www.cnblogs.com/linlf03/ 可参考http://www.codeceo.com/article/eclipse ...

  8. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  9. build tree

    有二叉树的前序遍历和后序遍历,构造二叉树 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNod ...

  10. PS证件照换背景

    综述 博主原创内容. 在PS里,对于抠图,比较有技术含量的便是抠头发丝了,下面为大家带来一个比较详细的抠头发丝的教程. 素材准备 在这里我们用这张图片作为抠图素材,下面让我们一步步来演示抠图的过程,并 ...