POJ1384完全背包

POJ1384 动态规划 (完全背包) 嗯哼,继续动态规划,其实有点想滚去做开发。 题目概述: 有一个存钱的人,往小猪罐子里存钱。给定罐子净重,和存钱后的质量。继而给定每一种扔进去硬币的价值和重量,要求计算最小的可能的满足这个总质量的钱的价值总和。 很明显的完全背包,因为投进去的钱可以是无限的。 算法思想: 具体描述一下动态规划数组。 这道题是完全背包,所以第二层循环可以用顺序递增。关于怎么把 阅读详情

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.

这题我WA了好多次
原因是这样的,我被那个背包必须满的条件给限制住了
一开始我的dp数组是初始化为0,然后这个dp我就写不出来了…
再后来换了一种想法,我把dp的对象作为重量
按照max来dp
如果他最终的时候重量为n那么就更新一次sum
但是这样又不对了,因为你只是疯狂的增大了他的重量,
并没有给出可以更新sum的数据
所以疯狂WA
按照完全背包从前向后的放来看,只要dp[n]被更新过那么就一定存在着题目要求
因此直接求最小值就可以

#include<iostream>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdlib>
using namespace std;
int zhi[501];
int zhong[501];
long long  dp[10001];
int dpz[10001];
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        memset(zhi, 0, sizeof(zhi));
        memset(zhong, 0, sizeof(zhong));
        for (int a = 1;a <= 10001;a++)dp[a] = 100000000;
        int w1, w2;
        cin >> w1 >> w2;
        int m;
        cin >> m;
        int n = w2 - w1;
        if (n == 0)
        {
            printf("The minimum amount of money in the piggy-bank is 0.\n");
            continue;
        }
        long long sum = 100000000;
        for (int a = 1;a <= m;a++)cin >> zhi[a] >> zhong[a];
        for (int a = 1;a <= m;a++)
        {
            for (int b = 1;b <= n;b++)
            {
                if (b - zhong[a] >= 0)
                {
                    if (dp[b] > dp[b - zhong[a]] + zhi[a] ) //&& dpz[n] <= n
                    {
                        dp[b] = dp[b - zhong[a]] + zhi[a];
                        if (b == n)
                        {
                            sum = min(sum, dp[b]);
                        }
                    }
                }
            }
        }
        if (sum == 100000000)
        {
            cout << "This is impossible." << endl;
        }
        else
        {
            printf("The minimum amount of money in the piggy-bank is %lld.\n", sum);
        }
    }
    return 0;
}
POJ 1384(完全背包变形) 题意:这是一个关于小猪存钱罐的问题,给你小猪存钱罐的最初重量和装满重量,然后再给你一些金币,金币有价值与重量,求小猪装满的情况下价值最小是多少。 思路:容量很容易求出,但是问题是如何求出最小价值,那么可以想到初始化和dp条件,初始化为inf,但是dp[0][0]必须设置为0,这样是满足条件的情况。 对于完全背包又忽然理解了为什么要从w[i]开始遍历,这里的状态是在这个j下这个物品要不要 阅读详情

相关推荐

POJ1384 Piggy Bank(完全背包与“恰好”)

已经是我的第四篇题解了hhhh 在这篇题解中,我们会讲到背包中“恰好”的概念以及它的使用方法。 —————————————————————————————————— 原题 POJ1384 Piggy Bank 题意 给出存钱罐中钱的总重量,给出每种钱的价格和重量(数量不限),求存钱罐中钱的最小价值最少为多少钱。 思路 变体的完全背包。 完全背包的两个状态转移方程: f[i][j] = max(f[...

Killua 616

poj 1384 完全背包

   记住这个公式就OK了。for i=1..N for v=w[i]..V f[v]=max{f[v],f[v-w[i]]+v[i]}.这样就转换成为了0/1背包问题是一样的,只不过第二个循环的顺序不一样而已。      #include&lt;iostream&gt; #include &lt;fstream&gt; #define MIN(a,b) (a&lt;b?a...

weixin_33778544的博客 195

C#图表开发避坑指南:Chart控件的Series和Points属性详解

本文深入解析C#图表开发中Chart控件的Series和Points核心属性,提供避坑指南。详细阐述了Series的数据序列管理、Points的高效操作与空值处理,以及多Series与ChartArea的协同配置,帮助开发者避免常见错误,实现稳定、高性能的数据可视化应用。

weixin_29313239的博客 364

POJ 1384 完全背包问题

阅读《背包九讲》的同时,配合做一下POJ上的题目。 上次练习是01背包问题,这次练习是完全背包问题。在01背包问题中,出现的背包要么选择,要么不选择。而在完全背包问题中,背包出现的次数是没有上限的,即可以选择任何次数的。在背包九讲里,作者给出了一个状态转移方程,核心代码如下:for( int i = 0; i < nObject; i++) { for( int j = weig

文西 3431

【接口自动化测试】cookie绕过验证码自动登录?(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者,每次请求接口前如果都需要先去登录一次,这样不仅效率低,还耗费资源。 有些网站是使用cookie辨别用户身份的,此时我们便可以先登录一次,拿到登录成功后的cookie,后续请求时在请求头中加入该cookie,便可保持登录状态直接请求。

weixin_67553250的博客 2069

WhatsApp API接口的隐秘角落:从协议解析到自定义消息引擎

本文深入解析WhatsApp API接口的隐秘角落,从协议逆向工程到自定义消息引擎开发实战。通过分析WhatsApp的二进制XML协议和加密机制,构建超越官方API限制的自定义消息引擎,实现高效、灵活的即时通讯解决方案。文章还提供了企业级架构设计和风控规避策略,助力开发者突破官方限制,提升消息到达率和成本效益。

q3r4s5t的博客 761

Poj 1384 Piggy-Bank 完全背包

题目: https://cn.vjudge.net/problem/POJ-1384 题意: 多组数据; 给定存钱罐的初始重量和最终重量,给定n中货币的价值,重量; 求恰好满足存钱罐的最终重量的货币总钱数最小值。若不满足,输出”xxx”; 题解: 1.每种货币都能放任意数量,完全背包; 2.恰好装满存钱罐,取min,初始化dp[i]=inf(i!=0);保证每个状态都是从起点dp[0

Mercury的博客 1341

第四天 Labview交互也很轻松(4.1 DAQ数据采集)

LabVIEW DAQ数据采集有很大的优势,NI提供了超过5千万条I/O通道,支持多种主流总线(如USB、PCI、PCIe、PXI等),并为所有这些设备提供统一的编程接口,实现软硬件的无缝集成。LabVIEW包含全套范例,覆盖各类应用,用户无需从头创建整个数据采集系统,可以快速启动并执行这些范例程序。所有NI DAQ硬件都采用NI-DAQmx驱动程序,支持多种编程语言,并包含了这些编程语言的示例代码,使得与NI硬件的通信变得更加便捷。

weixin_38637405的博客 2617

POJ 1384.Piggy-Bank - 完全背包

POJ 1384.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 behind is simple. Whenever some ACM member

玛软的垃圾桶 231

环境配置与基础教程:2026大厂标准:使用 DVC (Data Version Control) 实现 YOLO 数据集版本控制全链路管理

本文介绍了使用DVC 3.0对YOLO数据集进行全链路版本控制的方法。主要内容包括: DVC 3.0的核心增强:内容块级缓存去重、并行云传输、AI智能体元数据跟踪等新特性,可显著提升YOLO数据集管理效率。 环境配置:详细说明DVC 3.0的安装步骤、项目初始化方法以及远程存储配置方案(支持S3、GCS、Azure等多种存储后端)。 目录结构规范:提供符合大厂MLOps标准的项目目录结构设计。 实战操作: 原始数据版本化 多格式标注数据版本控制 版本切换方法 优势说明:DVC通过哈希指针机制管理大型数据集,

ZXSXJ的博客 148

基于STM32设计的智能厨房环境监测报警系统_426

随着天然气、液化石油气等可燃性气体在家庭中的广泛应用,燃气泄漏所引发的安全问题日益突出。针对传统家用可燃气体报警器功能单一、信息获取受限以及缺乏远程监测能力等不足,设计了一种基于STM32单片机的家用可燃气体报警器系统。

760

poj1384 完全背包(刚好塞满,经典初始化问题)

Piggy-Bank Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10116   Accepted: 4951 Description Before ACM can do anything, a budget must be prepared and the

转角的守望 1318

python pyusb与硬件 下位机通信

python pyusb 与硬件 下位机 通讯

yuhang01的博客 952

Poj 1384 & Hdu 1114 Piggy-Bank (完全背包)

题目链接:http://poj.org/problem?id=1384 题意:给你一个储蓄罐空的和满的重量E、F,然后给出各种硬币的价值P和对应的重量W,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量。1 思路:完全背包,因为是求最小值且必须装满,故f[0]初始化为0,数组其他部分为正无穷。 注意正无穷不要习惯性写成0x7fffffff,代码中标记处执行加运算后

whyorwhnt的专栏 1264

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

poj1384——dp,完全背包

POJ 1384 dp,完全背包 Piggy-Bank Time Limit:1000MS Memory Limit:10000K Total Submissions:8404 Accepted:4082 Description Before ACM can do anything, a budget must be pr...

weixin_30701575的博客 101

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJ 1384 Piggy-Bank(完全背包)

POJ 1384 Piggy-Bank(完全背包) http://poj.org/problem?id=1384 题意: 现在有n种硬币,每种硬币有特定的重量cost[i] 克和它对应的价值val[i]. 每种硬币可以无限使用. 已知现在一个储蓄罐中所有硬币的总重量正好为m克, 问你这个储蓄罐中最少有多少价值的硬币? 如果不可能存在m克的情况, 那么就输出” This is impossible.”.

code 2990

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

poj1384 完全背包

题意:你有个存钱罐,没事就往里面放零钱,有一天你想用 了

黑山老猴妖的专栏 837

poj 1384 && hdu 1114 Piggy-Bank (完全背包)

题目链接:http://poj.org/problem?id=1384 解题报告:题目要求背包容量一定,把背包装满时背包的价值最小。                  由于每一件物品的数量是无限的,所以是完全背包问题。                   题目要求价值最小,所以我们在初始化的时候,应该初始化最大值,由于在背包容量为0的时候,价值是0。 code: #include #in

起航 843

poj 1384 完全背包的最小值

题意: 有一个存钱罐,不砸碎它,称重得到里面硬币的重量, 硬币分为面值和重量,给定重量和面值,求达到该重量的最小面值 解法: 注意几个问题:1.完全背包的循环方向                             2.注意要满足恰好等于给定的重量,不能比它轻或者重,所以对于初始化有要求                             3.注意是求最小值,不是常见的最大值

cfzjxz的专栏 1348

POJ 1384【完全背包】

题意: 已知储蓄罐满时的质量f以及空时质量e, 有n种硬币,每种硬币的价值为p,质量为w, 求该储蓄罐中的最少有多少钱? 思路: 完全背包思想,问题是在一个重量下的最小价值 那么只要变一下符号就好了?//#include <bits/stdc++.h> #include<iostream> #include<string.h> #include<cstdio> #include<algo

ONE MORE TRY 527

POJ1384完全背包问题

题目大意:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量解题思路:完全背包问题,只是求最小值,注意初始化的处理就可以。已知储蓄罐满时的质量f以及空时质量e,有n种硬币,每种硬币的价值为p,质量为w,求该储蓄罐中的最少有多少钱?这道题还要用到动态规划 1 #include<std...

diudunhai7121的博客 160

完全背包 poj 1384

#include #include #include #include using namespace std; const int maxn=500; const int maxdp=10010; int p[maxn],w[maxn]; int dp[maxdp]; int main() {  //freopen("in.txt","r",stdin);  int t;

amourjun的专栏 582

完全背包 poj1384

http://poj.org/problem?id=1384 #include #include #include using namespace std; int p[510]; int w[510]; int dp[10010]; int min(int a,int b){ return a<b?a:b; } int main(){ int T; scanf("%

github_35807147的博客 414
上一篇: POJ3624 01背包
下一篇: HDU1025 nlogn的LIS
NineFailure
博客等级 码龄11年 22粉丝 317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值