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]均设为−∞. 又这个题目是求最小价值: 则就是初始化 ...
随机推荐
- 【ssm整合打印sql语句】
#定义LOG输出级别log4j.rootLogger=INFO,Console,File #定义日志输出目的地为控制台log4j.appender.Console=org.apache.log4j.C ...
- 洛谷P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 关于特殊目录如com null无法删除的处理办法
1.把以下批处理做成一个del.bat放在桌面 del /f /a /q \\?\%1 rd /s /q \\?\%1 2.需要删除的文件或者文件夹拉到这个文件上就可以了 可以删除没有属性项目中没有安 ...
- Android Gradle 学习笔记(五):Gradle 任务 Task
在之前的学习中,我们了解到Gradle的构建工作都是由Task组合完成的.本节我们就来介绍一下 Task - 任务. 一.多种方式创建任务 在Gradle中,我们可以有很多种方式来创建任务.为什么有这 ...
- SMTP服务器配置
Windows Server 2012/2012 R2:安装和配置 SMTP 服务器 安装 SMTP 服务器 以下是安装 SMTP 服务器功能的步骤: 1. 打开“服务器管理器”:单击键盘上的 Win ...
- IOS 贝塞尔曲线切割圆角
写一个UIView扩展 1. .h文件 @interface UIView (Corner) - (void)setCornerWithType:(UIRectCorner)type Radius:( ...
- 判断当前用户是否在某个SharePoint组内
/// <summary> /// 判断当前登录人是否在sharepoint组中 /// </summary> /// <param name="current ...
- Luogu P2183 [国家集训队]礼物 扩展卢卡斯+组合数
好吧学长说是板子...学了之后才发现就是板子qwq 题意:求$ C_n^{w_1}*C_{n-w_1}^{w_2}*C_{n-w_1-w_2}^{w_3}*...\space mod \space P ...
- Flume NG部署
本次配置单节点的Flume NG 1.下载flume安装包 下载地址:(http://flume.apache.org/download.html) apache-flume-1.6.0-bin.ta ...
- 前后端API交互数据加密——AES与RSA混合加密完整实例
前言 前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用R ...