HDU 1114 Piggy-Bank 【完全背包(时间优化)】

HDU-1114 Piggy-Bank 完全背包的灵活运用 Piggy-Bank Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behi... 阅读详情

 

 

Problem Description

Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behind is simple. Whenever some ACM member has any small money, he takes all the coins and throws them into a piggy-bank. You know that this process is irreversible, the coins cannot be removed without breaking the pig. After a sufficiently long time, there should be enough cash in the piggy-bank to pay everything that needs to be paid. 

But there is a big problem with piggy-banks. It is not possible to determine how much money is inside. So we might break the pig into pieces only to find out that there is not enough money. Clearly, we want to avoid this unpleasant situation. The only possibility is to weigh the piggy-bank and try to guess how many coins are inside. Assume that we are able to determine the weight of the pig exactly and that we know the weights of all coins of a given currency. Then there is some minimum amount of money in the piggy-bank that we can guarantee. Your task is to find out this worst case and determine the minimum amount of cash inside the piggy-bank. We need your help. No more prematurely broken pigs!

 

 

Input

The input consists of T test cases. The number of them (T) is given on the first line of the input file. Each test case begins with a line containing two integers E and F. They indicate the weight of an empty pig and of the pig filled with coins. Both weights are given in grams. No pig will weigh more than 10 kg, that means 1 <= E <= F <= 10000. On the second line of each test case, there is an integer number N (1 <= N <= 500) that gives the number of various coins used in the given currency. Following this are exactly N lines, each specifying one coin type. These lines contain two integers each, Pand W (1 <= P <= 50000, 1 <= W <=10000). P is the value of the coin in monetary units, W is it's weight in grams.

 

 

Output

Print exactly one line of output for each test case. The line must contain the sentence "The minimum amount of money in the piggy-bank is X." where X is the minimum amount of money that can be achieved using coins with the given total weight. If the weight cannot be reached exactly, print a line "This is impossible.".

 

 

Sample Input

3 10 110 2 1 1 30 50 10 110 2 1 1 50 30 1 6 2 10 3 20 4

 

 

Sample Output

The minimum amount of money in the piggy-bank is 60. The minimum amount of money in the piggy-bank is 100. This is impossible.

 

思路:一般的背包是求最大值的,如果求相反的情况的话,只要把dp的初始值对调一下就行了,最大值的背包dp的初始化是 0,这里要注意的是dp【0】= 0并不是初始化,而是一个确定的值,求最小,初始化要补除 0 外 全部初始化为一个很大的值 INF

 

不知道用没有时间优化的完全背包会不会超时,下面的代码是用了时间优化的:

 

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>

using namespace std;

#define Maxn 10010
#define INF 999999999

int dp[Maxn],price[Maxn],w[Maxn];

int main(void)
{
   // freopen ("in.txt","r",stdin);
   // freopen ("out.txt","w",stdout);
    int t,E,F,kind;
    while (scanf("%d",&t)!=EOF) {
        while (t--) {
            scanf("%d%d%d",&E,&F,&kind);
            for (int i = 1; i <= kind; ++i) {
                scanf("%d%d",&price[i],&w[i]);
            }
            int max_p = F-E;
            dp[0] = 0; // 这里的初始值设置为INF,表示还没有填入数据,但是要单独把dp[0]隔开,
                        //如果是求最大的值的话,就可以全部初始化为 0 ,如果是这里,dp[0]的值是确定的
                        //就是等于 0,因为当背包的重量为0的时候,等于啥都没放
            for (int i = 1; i <= max_p; ++i) dp[i] = INF;  
            // 如果dp初始化为INF,如果用时间优化的方程求的话,是填入不了值得,
            //观察一下公式就知道,最小值一定是INF,所以第一次的时候,要把数据填入;
            //填入的数据就是 1 到 k 个第一种price填到对应的dp中
            for (int k = 1; k*w[1] <= max_p; ++k) dp[k*w[1]] = k*price[1];

            for (int i = 2; i <= kind; ++i) {
                for (int j = 1; j <= max_p; ++j) {
                    if(j-w[i] < 0 ) continue;
                    else dp[j] = min(dp[j],dp[j-w[i]] + price[i]); // 这里用到了完全背包的时间优化
                }
            }
            if(dp[max_p] < INF) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[max_p]);
            else printf("This is impossible.\n");
        }
    }
    return 0;
}

 

这里时间优化的方法提示一下:如果是从 0 开始更新dp的话,那么 dp[ j ] 这个地方的k种取法有  dp[ j - 1*w[i] ] ,dp[ j - 2*w[i] ], dp[ j - 3*w[i] ],,,,dp[ j - k*w[i] ];那么如果是 dp[ j + w[i] ] ,k种取法有 dp[ j + w[i] - 1*w[i] ] ,dp [ j + w[i] -2*w[i] ], dp[ j + w[i] - 3*w[i] ] ,,,dp[ j +w[i] - k*w[i] ];很明显的,dp[ j ] 比较过的数据, dp[ j + w[i] ] 有很多是重复了,我们把上面的规律整理一下,就会发现,dp[ j + w[i] ] 的 k种情况的比较数据的结果,就是 dp[ j ] + v[ i ]; 这里的 v 是价值;不是非常的清晰,最好是根据提示自己独立思考;

 

 

 

 

 

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例) 本文深入解析了SAP CO模块中结果分析码KKA2/CJ88的核心应用,通过真实案例详细阐述了如何在成本波动剧烈的销售型项目中,运用结果分析实现收入与成本的精准匹配。文章重点拆解了不同结果分析方法的适用场景与财务影响,并提供了从配置、操作到问题排查的完整实战指南,帮助财务顾问提升项目财务管理能力。 阅读详情

相关推荐

libnice和coturn这两个库有交叉实现的地方,具体有啥区别?

TurnAdmin:是一个TURN的管理工具,此工具能被用来管理用户账号的增删改查。 TurnServer:是TURN和STUN的服务器实现。 Turnutils_uclient: 模拟多个UDP、TCP、TLS或DTLS客户端 Turnutils_peer: 一个简单的无状态UDP-ECHO服务器,用作中继模式中的最终服务器 Turnutils_stunclient: 一个简单的STUN客户端例子 Turnutils_rfc5769check: 检查STUN/TURN协议实现的正确性。 我们..

Langeldep的专栏 1318

完全背包——时间+空间双优化

完全背包,即所有物品都无限制数量的拿取,则可以使用三层循环,而三层循环的大样例基本都会爆时间,那么应该怎么省时间呢?我们通过列举一件物品的每一个数量可以发现每次的都是在两边添加w[i]朴素完全背包可以使用三层循环,最后一层循环即为每件物品的数量。再将其优化成一维滚动数组,就完成了时间与空间的双优化。但是能不能像01背包一样用二层循环呢?

Chuckie_Z的博客 239

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 642

动态规划 -- #完全背包问题,含空间优化,时间优化思路。(C++)

完全背包分析,空间二维变一维分析,时间三维变二维分析

mengzh的博客 646

地平线旭日X3 安装xfce桌面+VNC查看USB摄像头

VNC是Virtual Network Computing的缩写,它是一种使用RFB(Remote Frame Buffer)协议的用于控制远程电脑的图形桌面分享系统。xfce桌面相比于GNOME桌面更加轻量,占用的资源更少,在没有GPU的设备上也可以运行(旭日的Desktop版本从外观上好像就是xfce桌面,具体没有尝试)。可以使用专用的VNC客户端连接到开发板,例如vnc viewer。板子默认带有openssh-server,因此,WiFi热点连接成功后,就可以使用ssh登录开发板了。

bingdund的博客 509

常用元器件使用方法36:USB转串口芯片CH340X

本文介绍了CH340X芯片的使用方法

snmplink的博客 2835

完全背包问题(超级详细地讲解优化过程)

超详细地推导完全背包的优化过程,让你彻底掌握完全背包问题!

Turing_Sheep的博客 7334

6-Halcon-- var_threshold 函数功能(用于基于局部统计特性的动态阈值分割的算子)

var_threshold 是 HALCON 中用于基于局部统计特性的动态阈值分割的算子,特别适用于处理低对比度图像或纹理均匀但包含细微差异的场景。与 dyn_threshold 不同,它不依赖预处理生成的参考图像,而是直接在局部区域内计算灰度值的统计特性(均值和标准差),从而自适应调整阈值。

weixin_45590420的博客 1326

Hdu 1009 Budget

Problem Description: 题意: 给一个1e18范围的小数,这个数,精确到了后三位小数,只有最后一位模拟四舍五入,给一个n,输入n个这样的数,求更新后(亏损或得到)的和是多少 Input: 1 1.001 1 0.999 2 1.001 0.999 Sample out: -0.001 0.001 0.000 WA代码: #include<bits/stdc++.h> ...

yangzijiangac的博客 215

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本文介绍哨兵1号用的FDBAQ算法,它实现非整数可变bit压缩,大部分数据仅需 3bit输出,少数高反射率数据需4bit输出,使得平均输出比特率刚超过3bit,比熵约束分块自适应量化 (ECBAQ)压缩算法所需的3.7bit更低。也就是说FDBAQ压缩完,除了要记录分块尺寸和各块的均值码(对应哨兵1号数据包里的THIDX)外,还需要记录霍夫曼码字的长度(对应哨兵1号数据包里的BRC)。唯一不同的就是量化后的编码规则使用了霍夫曼编码,相当于在传统的BAQ压缩流程的后面又加了一个步骤。

2303

第9章:Embedding、Pooling 与检索增强基础

本文介绍了律师事务所如何利用vLLM构建法律文档RAG系统,解决传统关键词检索在语义匹配上的不足。主要内容包括: 项目背景:传统Elasticsearch检索在法律术语上的低准确率问题,及多模型维护的复杂性; 技术方案:采用vLLM统一支持生成和向量化能力,通过语义向量检索提升相关性; 关键实现: 用vLLM的Embedding端点处理文档向量化 构建包含离线索引和在线检索的完整RAG流程 采用余弦相似度进行语义匹配 实践建议:切片大小选择、向量归一化处理、不同场景下的数据库选型等。

davidwang456的专栏 59

C++ 完全背包时间优化、完全背包空间优化

至少放一个的话,我们尝试在“前i个物品放满一个容量为j的背包”,拿到一个物品,即前i种物品放满一个容量为j-c[i]的背包,这个时候便是dp[i][j-c[i]] + w[i]状态转移方程:dp[i][j] = max(dp[i-1][j], dp[i][j - c[i]] + w[i])一个都不放,就是前i-1种物品放满一个容量为j的背包,是dp[i-1][j]对于第i个物品,其实有两种选择,一个都不放,至少放一个。代码练习 1 对应蓝桥云课 小明的背包2 代码见下。代码练习2 对应力扣硬币 代码见下。

qq_43355454的博客 387

【YOLOv8改进[Conv]】使用OREPA助力V8更优秀

使用OREPA助力V8更优秀,降低训练成本,在不引入任何推理时间成本的情况下提高深度模型的性能。

静谧、淡雅 1918

HDU-1114 Piggy-Bank(完全背包讲解以及它的的三种做法)

Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description Before ACM can do anything, a budget must be prepared and the necessary financial sup...

孤风的博客 816

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

完全背包]HDU 1114 Piggy bank

HDU 1114 piggy bank 完全背包问题

昨天的我现在的未来 532

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

hdu1114Piggy-Bank(DP完全背包)

题意:在ACM可以做任何事情,必须准备和预算获得必要的财政支持。这次行动的主要收入来自不可逆绑定金钱(IBM)。背后的想法很简单。每当一些ACM成员有任何小的钱,他把所有的硬币和成小猪银行抛出。你知道,这个过程是不可逆的,不能被删除的硬币没有打破猪。足够长的时间后,应该有足够的现金在小猪银行支付,需要支付的一切,但有一个很大的问题,小猪银行。这是不可能的,以确定多少钱,里面是。因此,我们可能会破坏

陌上花开 1674

Piggy-Bank HDU - 1114 (完全背包)

Piggy-Bank HDU - 1114 Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behind is simple. Whenever some ACM member has any

Are_you_ready的博客 179

HDU 1114 Piggy-Bank(完全背包/二进制压缩orO(V*N)算法)

题目链接: HDU 1114 Piggy-Bank 题意: 已知一个存钱罐的初始重量和存钱之后的重量。有n种货币,每种货币有面值和货币重量。问存钱罐中的钱最少是多少钱? 分析: 完全背包。用dp[i][j]表示用前i种货币组成重量j的最小面额。 初始化:dp[i][j]=INF(j!=0),dp[i][j]=0(j=0); 状态转移方程: dp[i][j]=min(dp[i][j],

ramay7 1031

hdu 1114 Piggy-Bank(完全背包)

题意: 给你一个容量为n的背包,和数量为m的物品,每件物品有价值和重量,并且可以取无数次,问你怎样取得最小值,并把重量取满。 思路: 一开始写了一个01背包,稍微改了一下变成完全背包了,不过被卡空间了。 然后看了一下讨论区是用完全背包写的,就去学习了一下完全背包的做法,和优化空间。 这题就是一个裸的完全背包把dp初始化inf就行了。滚动数组优化空间也挺简单的。 代码:(01背包卡空间版本) ...

weixin_43736492的博客 148

hdu1114 Piggy-Bank(完全背包,求最小价值)

Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9624    Accepted Submission(s): 4853 Problem Description Before ACM can

GAO1024 712

[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank HDU - 1114(完全背包)

F - Piggy-Bank HDU - 1114(完全背包) 题目链接:https://vjudge.net/contest/68966#problem/F 题目: Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The ma...

weixin_30446197的博客 95

HDU 1114 Piggy-Bank 完全背包

http://acm.hdu.edu.cn/showproblem.php?pid=1114 Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversi...

xiji333的博客 208

Piggy-Bank//HDU - 1114//完全背包

Piggy-Bank//HDU - 1114//完全背包 题目 Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money...

salty_fishman的博客 155

HDU 1114 Piggy-Bank(DP,完全背包问题,最小值)

题目链接 Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 45441 Accepted Submission(s): 22385 Problem Description Before ACM can do...

shiftrain的博客 253

hdu 1114 Piggy-Bank (完全背包+背包放满)

最近在恶补背包,背包九讲写的真的是太牛了!!

小华在努力~ 565

[HDU-1114]Piggy-Bank(完全背包)

Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 31605    Accepted Submission(s): 15744 Problem Description Before ACM ca

acmer_mozhu的博客 347

01背包及完全背包问题(51Nod - 1085,HDU 1114 Piggy-Bank)

51Nod - 1085题目: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。 Input 第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000) 第2 - N +

zero 436
上一篇: Dilworth定理【没有证明,只是暂时记下来】
下一篇: poj 1742 Coins 【多重背包+二进制拆分优化】
Y390d
博客等级 码龄9年 11粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值