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…
题意:有一个存钱罐,空罐时的重量是e,满罐时的重量是f,现在有n种硬币,每一种有无限个,现在给出每一种硬币的价值p和重量w,问存钱罐中最少钱,输出最小钱,否则输出... 思路:变形的完全背包问题,只是求最小值 #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; +; const…
HDU 1114 Piggy-Bank 完全背包问题. 想想我们01背包是逆序遍历是为了保证什么? 保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗 means:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量要求出装满钱罐时的最小价值 #include<cstdio> #include<cstring> #include<cmath> #include<iostream> usin…
Piggy-Bank  HDU 1114 初始化的细节问题: 因为要求恰好装满!! 所以初始化要注意: 初始化时除了F[0]为0,其它F[1..V]均设为−∞. 又这个题目是求最小价值: 则就是初始化时除了F[0]为0,其它F[1..V]均设为∞. #include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> using namespace std; const int…
Piggy-Bank Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1114 Appoint description:  System Crawler  (2015-09-06) Description Before ACM can do anything, a budget must be prepared and the neces…
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1592    Accepted Submission(s): 444 Problem Description 因为马拉松初赛中吃鸡腿的题目让不少人抱憾而归,威威猫一直觉得愧对大家,这几天他悄悄搬到直角坐标系里去住了. 生活还要继续,太阳也照常升起,今天,威威猫在…
Piggy-Bank Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1114 Description Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income fo…
HDOJ(HDU).1114 Piggy-Bank (DP 完全背包) 题意分析 裸的完全背包 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 100000 #define INF 0x3f3f3f3f using namespace std; int we[nmax],va[nmax],dp[nmax]; stru…
题目地址:HDU 1114 把dp[0]初始化为0,其它的初始化为INF.这样就能保证最后的结果一定是满的,即一定是从0慢慢的加上来的. 代码例如以下: #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <cmath> #incl…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32136    Accepted Submission(s): 15965 Problem Description Before ACM can do anythi…
http://acm.hdu.edu.cn/showproblem.php?pid=2602 第一题 01背包问题 http://acm.hdu.edu.cn/showproblem.php?pid=1114 第二题 完全背包问题 http://acm.hdu.edu.cn/showproblem.php?pid=2191 第三题 多重背包问题 这里重复使用数组 认识倒序 和 正序的原因 转自:http://www.cppblog.com/tanky-woo/archive/2010/07/31…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 AC code: #include<bits/stdc++.h> using namespace std; int main() { int c; scanf("%d",&c); while(c--) { ],w[]; scanf("%d%d%d",&e,&f,&n); ; i<n; i++) scanf(&quo…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 简单完全背包,不多说. #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <map> #include <iterator> #include <vector> using namespace std;…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题目大意:根据储钱罐的重量,求出里面钱最少有多少.给定储钱罐的初始重量,装硬币后重量,和每个对应面值硬币的重量. 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…
题目大意:              告诉你钱罐的初始重量和装满的重量, 你可以得到这个钱罐可以存放钱币的重量,下面有 n 种钱币, n 组, 每组告诉你这种金币的价值和它的重量,问你是否可以将这个钱罐装满,装满的情况下,输出最小的价值, 不能装满则输出“This is impossible.”(很典型的完全背包的问题)   #include <iostream> #include <cstdio> #include <cstring> #include <alg…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 思路:求出存钱罐装全部装满情况下硬币的最小数量,即求出硬币的最小价值.转换为最小背包的问题. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; int dp[INF],val[INF],we[INF]; int main(void) { int t,n,i,j,m,…
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1114 题意 给出一个储钱罐 不知道里面有多少钱 但是可以通过重量来判断 先给出空储钱罐的重量 再给出装满钱币后储钱罐的重量 之后给出N种货币 pi wi pi 表示 第i件货币的价值 wi 表示第i件货币的重量 最后要求 储钱罐里面最少有多少钱 思路 完全背包模板问题 要注意初始化 因为这个是重量要刚好达到 初始化为 INF dp[0] = 0 AC代码 #include <cstdio> #in…
题意: 给定一个存钱罐中要存硬币,知道空罐的重量和欲装满的重量,是否能装入?若能,打印最小价值.(注:能装的硬币重量一定刚刚好,里面的总价值要达到最小) 输入: 包含了T个测试例子,在第一行给出.接下来有T个例子,每个例子第一行包括两整数E和F,分别代表空罐的重量和装满钱的重量,单位都为克. 1 <= E <= F <= 10000. 第二行包含了一个整数N,代表了硬币的种类.(1 <= N <= 500)接下来N行是N种硬币的信息,每行有两个整数P和W,分别代表价值和重量,…
http://acm.hdu.edu.cn/showproblem.php?pid=1114 完全背包的题目,要求输出最小价值.然后一定要把给出的背包重量全部用完. 就是问一个背包为k的大小,n件物品,能装的最小价值,并且一定是用了k个背包容量. 用dp[i]表示背包容量为i得时候,能收录的最小价值, 边界:dp[0] = 0: 没容量,啥都干不了 else dp[i] = inf.一开始初始化为无穷大. 转移的话,dp[i] = min(dp[i], dp[i - weight[j]] + v…
在杭电上测试了下 这里的状态转移方程有两个.,. 现在有价值val[1],val[2],…val[n]的n种硬币, 它们的数量分别为num[i]个. 然后给你一个m, 问你区间[1,m]内的所有数目, 由之前n种硬币来构造(即选取某些硬币使得这些硬币的价值和等于[1,m]区间的特定数), 最多能构造出这m个数中的多少个? 初始化: dp为全0,且 dp[0][0]==1. 对于每种硬币, 我们有两种可能的方式处理://重点 多重包的两种转化 1.   Val[i]*num[i]>= m时, 对当…
HDU 1144 Piggy-Bank 题意:有这么个存钱罐,给你空的时候重量和满的时候的重量,再给你N中类型的硬币(给出N种硬币总数量和总重量,可多次使用),问你怎样恰好填满存钱罐,而让填入的硬币数量最少. 思路:完全背包,求最少填入硬币数量,要把dp数组全部填充为INF,求min,注意结果要恰好填满. dp[j]= min(dp[j],dp[j-w[i]]+v[i])(dp[j]代表当前步,所用硬币最小数目) /** Sample Input 3 10 110 2 1 1 30 50 10…
储钱罐 [题目描述] 今年的ACM比赛在xxx国举行,为了比赛的顺利进行,必须提前预算好需要的费用,以及费用的来源.费用的主要来源是只进不出的金钱.其实原理很简单,每当ACM成员有任何一点小钱,他们就会把这些钱全部投进储钱罐.你知道钱投进储钱罐后是无法再取出来的,除非你打碎储钱罐,而这是不允许的.经过一段足够长时间的积累,储钱罐中应该有足够的金钱来支付ACM比赛需要的一切费用. 储钱罐不允许打碎,我们也不能确定里面有多少钱,钱是否够用.不过,我们知道储钱罐以及每种硬币的重量,于是我们可以试着猜测…
题目大意:某个人有n种硬币,每种硬币价值为v,数量为c,问在总价值不超过m的条件下,最多有多少种组合方式. 题目思路: 1.对于某种硬币 如果v*c 大于 m,就意味着无论取多少枚硬币,只要总价值不大于m就取不完该种硬币--完全背包. 2.如果某种硬币,如果v*c 不大于m,就意味着这是多重背包,因此可以用二进制方法优化一下. 3.对于不大于m的任意数字j,dp[j]=0代表无法组合成j,dp[j]=1 代表可以组合成j,dp[j]=dp[j]|dp[j-v[i]*k](k为选择第i种硬币的数量…
在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持.该活动的主要收入来自于 Irreversibly Bound Money (IBM).思路很简单.任何时候,某位 ACM 会员有少量的钱时,他将所有的硬币投入到小猪储钱罐中.这个过程不可逆,因为只有把小猪储钱罐打碎才能取出硬币.在足够长的时间之后,小猪储钱罐中有了足够的现金,用于支付 ACM 活动所需的花费. 但是,小猪储钱罐存在一个大的问题,即无法确定其中有多少钱.因此,我们可能在打碎小猪储钱罐之后,发现里面的钱不够.显然,我们希望…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1171 分析: 例如数据 3 10    2 20    1 30    1 获得这样一个降序的数组:30 20 10 10 (两个10是因为10值物品有两个) 总物品价值的一半为背包容量,然后从价值大的物品开始选,当当前背包中物品价值加上将要放的物品的价值大于背包容量的时候,将要放入背包的物品不放入 注意点 1.n为负数的时候停止循环,而不是n==-1 2.背包容量为有小数的数时,取ceil上极限…
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18924    Accepted Submission(s): 9579 Problem Description Before ACM can do anything, a budget must be prepared and the necessary finan…
.,. 最近在看背包九讲 所以就刷了一下背包的题目 这道题目是一个典型的完全背包问题 而且要求满包 在这里 我就简单整理一下背包初始化问题吧 对于没有要求满包的问题 也就是背包可以不取满的问题 在背包初始化的时候 可以全部初始化为0(inf)因为不要求其满包 所以 在求解的过程中 就不用强求从第一个点开始取 而对于满包的问题 则必须是从dp[0]这个有效的点开始存放的 其他都必须初始化为无效状态 因为如果需要满包 则必须从0这个状态开始的后续状态才满足条件 .,. 写的有点乱 借鉴一下其他人的.…
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14395    Accepted Submission(s): 7313 Problem Description Before ACM can do anything, a budget must be prepared and the necessary financial suppor…
题意:给一个储钱罐,已知空的储钱罐和装了硬币的储钱罐的质量.然后给了n种硬币的质量和价值. 问储钱罐里最少有多少钱. 解法:完全背包.注意要初始化为 INF,要正好装满,如果结果是INF,输出This is impossible. #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue&g…
题意 给出一个存钱罐里的钱币重量 给出可能的n种钱币重量以及价值 求存钱罐中钱币的最小价值 若不可能另有输出 在裸的完全背包上加了一点东西 即判断这个背包能否被装满 初始化 dp[0]=0 其余的都使用for循环设置成INF 以达到求min的目的 最后如果dp[v]还是那么大就说明它根本没有通过前面的方式被改变 即 不能被装满 #include<stdio.h> #include<string.h> #include<algorithm> #include<map…