HDU 1114 完全背包问题的转化
题目大意:
根据存钱罐中钱的重量,和每一种钱对应的重量和价值,判断钱能否塞满这个重量,如果能,输出得到的最小价值
这个问题就是要把它和背包问题连接起来,这里钱取得数目是无穷的,所以这里只需要用到完全背包来解决问题
在这里我们定义dp[i][j] 作为重量 j 的条件下,取前 i 中硬币塞满背包可得到的最小价值
1.dp[i][j] = min{dp[i-1][j] , dp[i-1][j-w] + w} 但这里前提是dp[i-1][j-w]和dp[i-1][j]都存在这样的情况
2.如果dp[i-1][j-w]存在dp[i-1][j]不存在,那么dp[i][j] = dp[i-1][j]直接赋值
3.如果均不成立,那么dp[i][j] = 0 表示不存在
然后同样根据背包的思想,二维数组压缩不断滚动更新压缩为一维数组dp[i],表示当前状态在 i 重量下取到的最小值
#include <cstdio>
#include <cstring> using namespace std;
const int N = ;
#define min(a,b) a<b?a:b
int dp[N] , M; int main()
{
int T , E , F , k , w , v;
scanf("%d" , &T);
while(T--){
scanf("%d%d" , &E , &F);
M = F-E;
scanf("%d" , &k);
memset(dp , , sizeof(dp));
for(int i= ; i<k ; i++){
scanf("%d%d" , &v , &w);
//用完全背包的形式处理
for(int i = w ; i<=M ; i++)
if(dp[i-w] > || i-w == ){
if(dp[i] > ) dp[i] = min(dp[i] , dp[i-w]+v);
else dp[i] = dp[i-w]+v;
}
} if(dp[M] == ) puts("This is impossible.");
else{
printf("The minimum amount of money in the piggy-bank is %d.\n" , dp[M]);
}
}
}
HDU 1114 完全背包问题的转化的更多相关文章
- HDU 1114 完全背包问题
题意:有一个存钱罐,空罐时的重量是e,满罐时的重量是f,现在有n种硬币,每一种有无限个,现在给出每一种硬币的价值p和重量w,问存钱罐中最少钱,输出最小钱,否则输出... 思路:变形的完全背包问题,只是 ...
- HDU 1114 完全背包 HDU 2191 多重背包
HDU 1114 Piggy-Bank 完全背包问题. 想想我们01背包是逆序遍历是为了保证什么? 保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗 means ...
- Piggy-Bank(HDU 1114)背包的一些基本变形
Piggy-Bank HDU 1114 初始化的细节问题: 因为要求恰好装满!! 所以初始化要注意: 初始化时除了F[0]为0,其它F[1..V]均设为−∞. 又这个题目是求最小价值: 则就是初始化 ...
- 怒刷DP之 HDU 1114
Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 1114 dp动规 Piggy-Bank
Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- HDOJ(HDU).1114 Piggy-Bank (DP 完全背包)
HDOJ(HDU).1114 Piggy-Bank (DP 完全背包) 题意分析 裸的完全背包 代码总览 #include <iostream> #include <cstdio&g ...
- HDU 1114 Piggy-Bank(一维背包)
题目地址:HDU 1114 把dp[0]初始化为0,其它的初始化为INF.这样就能保证最后的结果一定是满的,即一定是从0慢慢的加上来的. 代码例如以下: #include <algorithm& ...
- HDU 1114(没有变形的完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank Time Limit: 2000/1000 MS (Java/Others ...
随机推荐
- bzoj 1925: [Sdoi2010]地精部落【dp】
设[f[i][j]为1到i,开头数字是j并且是山峰的方案数 注意到当数字j和j-1不相邻时,交换它们会得到一个新的符合要求的序列,所以f[i][j]+=f[i][j-1]; 如果相邻,那么j是山峰,j ...
- 源码阅读之LinkedList(JDK8)
inkedList概述 LinkedList是List和Deque接口的双向链表的实现.实现了所有可选列表操作,并允许包括null值. LinkedList既然是通过双向链表去实现的,那么它可以被当作 ...
- 水题 CodeForces 137A Postcards and photos
题目传送门 /* 水! */ #include <cstdio> #include <cstring> #include <algorithm> using nam ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)
题目描述 In mathematics, matrix multiplication or matrix product is a binary operation that produces a m ...
- 395 Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子串
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度.示例 1:输入:s = "aaabb", k = 3输出:3最 ...
- 6.12---知道参数的重要性------插入数据-删除数据-修改数据注意Map
---------------
- LN : leetcode 238 Product of Array Except Self
lc 238 Product of Array Except Self 238 Product of Array Except Self Given an array of n integers wh ...
- FCC 基础JavaScript 练习2
1. 引号不是字符串中唯一的可以被转义字符.下面是常见的转义序列列表: \' 单引号 \" 双引号 \\ 反斜杠符 \n 换行符 \r 回车符 \t 制表符 \b 退格符 \f 换页符 ...
- [转帖]关于flask-login中各种API使用实例
原贴:http://www.cnblogs.com/alima/p/5796298.html 简介:简单的集成flask,WTForms,包括跨站请求伪造(CSRF),文件上传和验证码. 一.安装(I ...
- DWARF调试格式的简介
DWARF调试格式的简介 Michael J. Eager, Eager Consulting Feb, 2007 翻译:吴晖 2012年2月 如果我们可以编写确保能正确工作且永远不需要调试的程序,这 ...