HDU 1114 Piggy-Bank 猪仔储钱罐(完全背包)
题意:
给定一个存钱罐中要存硬币,知道空罐的重量和欲装满的重量,是否能装入?若能,打印最小价值。(注:能装的硬币重量一定刚刚好,里面的总价值要达到最小)
输入:
包含了T个测试例子,在第一行给出。接下来有T个例子,每个例子第一行包括两整数E和F,分别代表空罐的重量和装满钱的重量,单位都为克。 1 <= E <= F <= 10000. 第二行包含了一个整数N,代表了硬币的种类。(1 <= N <= 500)接下来N行是N种硬币的信息,每行有两个整数P和W,分别代表价值和重量,单位是克。
输出:每例输出一行,若能装入,打印The minimum amount of money in the piggy-bank is X. 其中X是钱的总额。若不能装入,打印 This is impossible.
思路:
和完全背包一样,不同的是硬币的重量要恰好,不能多或少,总价值要最小,这与完全背包问题相反。需要特别地处理这两个问题,重量要恰好,那么在更新dp的时候要保证这一点,总价要最小,那么在比较的时候要用min而不是max了。
#include <iostream>
#define MAX 0xfffffff
using namespace std;
//要求:1、刚好装满 2、总价值最小
int value[];
int weight[];
int dp[];
int min(int a,int b)
{
return a<b?a:b;
}
int cal(int v,int n) //空间、种类
{
int i,j;
dp[]=;
for(i=;i<=v;i++)
dp[i]=MAX;
for(i=;i<=n;i++)
for(j=weight[i];j<=v;j++)
{
dp[j]=min( dp[j] , dp[j-weight[i]] + value[i] );
}
return dp[v];
}
void main()
{
int T;
scanf("%d",&T);
int E,F,N,ans;
while(T--)
{
int i;
scanf("%d%d",&E,&F); //空罐、满罐
scanf("%d",&N); //多少种硬币
for(i=;i<=N;i++)
{
scanf("%d%d",&value[i],&weight[i]); //价值、重量
}
ans=cal(F-E,N);
if(ans==MAX)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",ans);
}
}
1114
HDU 1114 Piggy-Bank 猪仔储钱罐(完全背包)的更多相关文章
- HDU 1114 Piggy-Bank(判断是否恰好装满的背包)
其实这道题在寒假自学训练赛的时候就做过,不过感觉现在的理解跟当时真的不一样,大一半年过去了,变了这么多,我们都在进步,一回头便走出了这么远... 好了,题目很简单,一个背包,装不满做一个标记就行了 # ...
- HDU 1114 Piggy-Bank(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题目大意:根据储钱罐的重量,求出里面钱最少有多少.给定储钱罐的初始重量,装硬币后重量,和每个对应 ...
- HDU - 1114 Piggy-Bank 【完全背包】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1114 题意 给出一个储钱罐 不知道里面有多少钱 但是可以通过重量来判断 先给出空储钱罐的重量 再给出装 ...
- hdu 1114 基础完全背包
题意:给一个储钱罐,已知空的储钱罐和装了硬币的储钱罐的质量.然后给了n种硬币的质量和价值. 问储钱罐里最少有多少钱. 解法:完全背包.注意要初始化为 INF,要正好装满,如果结果是INF,输出This ...
- HDU 1114 Piggy-Bank (poj1384)
储钱罐 [题目描述] 今年的ACM比赛在xxx国举行,为了比赛的顺利进行,必须提前预算好需要的费用,以及费用的来源.费用的主要来源是只进不出的金钱.其实原理很简单,每当ACM成员有任何一点小钱,他们就 ...
- HDU 1114
在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持.该活动的主要收入来自于 Irreversibly Bound Money (IBM).思路很简单.任何时候,某位 ACM 会员有少量的钱时 ...
- (完全背包) Piggy-Bank (hdu 1114)
题目大意: 告诉你钱罐的初始重量和装满的重量, 你可以得到这个钱罐可以存放钱币的重量,下面有 n 种钱币, n 组, 每组告诉你这种金币的价值和它的重量,问你是否可以将这个钱 ...
- HDU 1114 完全背包 HDU 2191 多重背包
HDU 1114 Piggy-Bank 完全背包问题. 想想我们01背包是逆序遍历是为了保证什么? 保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗 means ...
- Piggy-Bank(HDU 1114)背包的一些基本变形
Piggy-Bank HDU 1114 初始化的细节问题: 因为要求恰好装满!! 所以初始化要注意: 初始化时除了F[0]为0,其它F[1..V]均设为−∞. 又这个题目是求最小价值: 则就是初始化 ...
随机推荐
- C#在Linux上的开发指南(续)
续之前的一篇开发指南http://www.cnblogs.com/RainbowInTheSky/p/5496777.html 部分人在部署的时候经常出现dll兼容问题(其实可以看小蝶惊鸿的文章,蝶神 ...
- docker17.09.1-ce 执行systemctl resart docker重启失败的问题
记录在实际操作中碰到的docker问题 环境信息: 安装完kolla ocata版本,并且编译成功各openstack 组件的容器镜像 [root@localhost ~]# docker --ver ...
- 机房重构——泛型和“DataTable”
前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...
- iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- Linux调优(文件系统)
查看单个文件是否发生碎片化(被存在磁盘非连续磁盘块上) # filefrag -v /var/log/messages 查看文件系统是否存在大量碎片(会显示空闲离散的块) # dumpe2fs /de ...
- 解决Nginx启动失败
一.Nginx下载http://nginx.org/en/download.html 二.Nginx启动失败原因1.本人下载的是nginx-1.12.1(稳定版),下载完解压后,进入路径中,start ...
- 【SQL Server 优化性能的几个方面】(转)
转自:http://blog.csdn.net/feixianxxx/article/details/5524819 SQL Server 优化性能的几个方面 (一).数据库的设计 可以参看最 ...
- Vertical roller mill from SBM
Vertical roller mill has many different forms, but it works basically the same. All of these forms o ...
- IDEA右键新建时没有Java Class选项
今天在IDEA中新建了一个maven工程,但是在我想要新建Class时发件右键菜单里竟然没有Java Class选项!如下图所示: 如上图红圈所示,我们可以根据对项目的任意目录进行这五种目录类型标注, ...
- 【Java密码学】Java SE 6中XML数字签名的实现
package test.xml.signature; import java.io.File; import java.io.FileInputStream; import java.io.File ...