![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
背包dp
ramay7
Life is not short,but float.
展开
-
UVA 624 CD(01背包/记录路径)
题目链接: UVA 624 CD 题意: 给出n个物品和总价值P,每个物品有一个价值,输出由这些物品组成价值和最接近P的价值(不能超过P)和和这些物品编号。 如果有多种方案任意输出一种。 分析: ①:先用类似01背包的思路对小于等于P的价值和进行可行性分析,然后找到最大能组成的合法价值和。根据这个价值和对原来的物品 dfs搜索。 ②:在找最大价值的过程中记录组成价值和的最后一件商品编原创 2016-03-30 14:51:58 · 509 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus(求m个不相交连续子序列最大和/01背包)
题目链接: HDU 1024 Max Sum Plus Plus 题意: n个数,求m个不相交连续子序列的最大和。n<=1e6,单个数[-32768,32767],m>0. 分析: dp[i][j][1]表示在求前i个数的j个不相交的最大子序列和时不要第i个数 dp[i][j][0]表示要第i个数。 *初始化:* dp为-INF,但是dp[0][0][0]=dp[0][0][1]=0原创 2016-04-12 20:00:53 · 645 阅读 · 0 评论 -
POJ 3260 The Fewest Coins(完全背包+多重背包(转化为01背包))
题目链接: POJ 3260 The Fewest Coins 题意: 有个人携带了n种货币,需要付款m元,给出n种货币的面值和每种货币的数量,付款总是用最少数量的货币,找零也总是用最少数量的货币,并且找零的货币种类也是他携带的那些货币种类,但是找零的货币数量是不限的,问完成付款和找零最少需要多少枚货币?如果完成不了,输出-1。 例如:n=3,m=70,货币面额是5,25,50,对应的货币数原创 2016-04-09 12:54:48 · 515 阅读 · 0 评论 -
HDU 2602 Bone Collector(01背包)
题目链接: HDU 2602 Bone Collector 注意: 单个背包的重量和总容量允许为0。#include <cstdio>#include <cstring>#include <algorithm>#include <climits>using namespace std;const int MAX_N=1010;int T,n,v;int val[MAX_N],cos原创 2016-03-28 14:18:14 · 295 阅读 · 0 评论 -
POJ 3624 Charm Bracelet(01背包)
题目链接: POJ 3624 Charm Bracelet 分析: 跟上一题一样。//508K 297MS#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAX_N=35000;//数组需要开大点,3500RE...int n,v;int val[MAX_N],原创 2016-03-28 14:35:54 · 331 阅读 · 0 评论 -
HDU 2546 饭卡(01背包)
题目链接: HDU 2546 饭卡 题意: 中文题意。 分析: 问题的核心就是在钱总数小于5之前尽可能的使金钱总数最小,然后用生下的>=5的钱去购买最贵的物品。 先将所有商品按价格排序,然后将最贵的保留,因为一定会购买它!而且最优的情况是用5元钱购买它! 所以问题就变成如何用v-5元钱去购买剩下的n-1件商品来获得最大总价值,这就是典型的01背包了。 注意: 当初始v<5时,什么都原创 2016-03-28 15:37:30 · 444 阅读 · 0 评论 -
POJ 2184 Cow Exhibition(变形01背包)
题目链接: POJ 2184 Cow Exhibition 题意: 给n头牛,每头牛有两个属性:smart和fun,选出若干头牛使得这些牛的smart和fun之和最大,并且smart和与fun和均不为负。 每头牛的smart和fun可以为负。 分析: 01背包和滚动数组。 用dp[j]表示得到smart和为j时的fun和最大值。但是因为j可能为负,一开始我是用map,但是一直TLE。。原创 2016-04-13 14:45:01 · 380 阅读 · 0 评论 -
HDU 1712 ACboy needs your help(简单01背包)
题目链接: HDU 1712 ACboy needs your help 题意: 有n门课程和m天的学习时间,在第i门课上学习j天可获得的效益是a[i][j],问m天学习这些课程可以获得的最大效益是多少? 分析: 简单01背包。 注意: 枚举第i门课的学习时间应从0开始。//1508K 62MS#include <cstdio>#include <cstring>#include原创 2016-04-13 15:37:24 · 329 阅读 · 0 评论 -
POJ 2063 Investment(完全背包)
题目链接: POJ 2063 Investment 题意: 有m元本金,想要在银行存year年,有n种可供选择的存款方式,每种存款方式都有相应的本金val[i]和年获利interst[i], 每年的获利又可以作为下一年的本金继续存储。数据范围:m<=1e6,year<=40,n<=10,val[i]是1000的倍数,年获利不超过百分之10. 分析: 完全背包。 因为val[i]是100原创 2016-04-13 15:39:54 · 474 阅读 · 0 评论 -
HDU 2639 Bone Collector II(01背包、第k优解)
题目链接: HDU 2639 Bone Collector II 题意: 有n件物品,背包总容量V,每件物品的体积和价值分别为volume[i]和val[i],求背包可以容纳的第K大的总价值? 分析: 优先队列,将所有情况保存下来,然后取前K个。//1612K 1170MS#include <cstdio>#include <cstring>#include <cmath>#inc原创 2016-04-13 15:52:57 · 531 阅读 · 0 评论 -
POJ 3211 Washing Clothes(01背包/可行性判断)
题目链接: POJ 3211 Washing Clothes 题意: n堆衣服和m种颜色,每堆衣服的颜色都相同,给出每堆衣服的颜色和洗这堆衣服的时间,有两个人同时洗衣服,但是必须洗完一种颜色的衣服之后才能洗下一种颜色的衣服。问洗完这些衣服的最短时间是多少? 分析: 考虑洗完每种颜色的衣服的最短时间。 假设洗完一种颜色衣服总共需要sum的时间,由于是两个人同时洗,考虑最少时间,那么就相当于原创 2016-04-09 02:01:12 · 499 阅读 · 0 评论 -
POJ 1276 Cash Machine(多重背包)
题目链接: POJ 1276 Cash Machine 题意: 有n种货币,每种货币的面额是val[i],数量是num[i],问由这些货币组成不超过cash的最大金额是多少? 分析: 多重背包。//1168K 0MS#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namesp原创 2016-04-11 22:32:56 · 326 阅读 · 0 评论 -
UVA 562 Dividing coins(01背包)
题目链接: UVA 562 Dividing coins 题意: 给出n个数,将这n个数分成两堆,使这两堆和尽可能接近,输出两堆和之差的绝对值。 分析: 记n个数的和为sum,则其中一对和一定是<=sum/2,而另一堆和>=sum/2。 那么就可以转化成这个问题:由这n个数组成不大于sum/2的最大数是多少?//0K 13MS#include <cstdio>#include <cs原创 2016-03-30 14:58:34 · 532 阅读 · 0 评论 -
HDU 2955 Robberies(01背包/对象转移)
题目链接: HDU 2955 Robberies 题意: 有个robber要去抢银行。抢每个银行会获得金额val[i],同时也会有cost[i]的概率被抓住,问在最大允许被抓住概率为p的情况下可以抢到的最大金额。 分析: 01背包的套路。只不过背包容量换成了被抓住的概率,因为概率是double型的,那就没办法枚举了。 可以倒过来想枚举抢到金额的成功的概率。成功的概率是概率相乘。//46M原创 2016-03-30 14:37:02 · 413 阅读 · 0 评论 -
HDU 3466 Proud Merchants(01背包/按limit-price从小到大排序)
题目链接: HDU 3466 Proud Merchants 题意: 有nn个商品和预算mm元。每个商品有个价格priceprice,购买限制limitlimit和价值valval,必须在手中剩余的金额大于limitlimit时才能购买这件商品.(limit>price)(limit>price)问在预算条件下最多能购买的商品价值是多少? 分析: 典型的01背包。一开始是按照limitli原创 2016-03-30 16:24:42 · 521 阅读 · 0 评论 -
HDU 3033 I love sneakers!(分组背包/至少选一个)
题目链接: HDU 3033 I love sneakers! 题意: 有n个物品分成k组,每个物品都有相应的价格和价值,每组物品都至少得买一件。有m元,如果能把k组每组至少买一件输出用m元能买到的最大价值;否自输出Impossible。 分析: 01背包的变形–分组背包,而且是每组至少买一个的分组背包而不是每组至多只能买一个。 用dp[i][k]表示在前i组每组至少选一样,耗费k能获得原创 2016-04-03 16:21:31 · 468 阅读 · 0 评论 -
HDU 3535 AreYouBusy(混合背包+分组背包/至少取一件)
题目链接: HDU 3535 AreYouBusy 题意: 有n组物品,有三种组:①:组中物品必须买一个;②:组中物品最多买一个;③:组中物品随便买。每个物品只能买一次,问给m元钱能得到的最大价值是多少?如果无法得到最大价值,即有的组该买而无法买,那就输出-1. 分析: 混合背包和分组背包。 分两部分解决,一部分是分组背包,即每组中必须买一个;另一部分是至多买一个和随便买。然后最终只需要原创 2016-04-03 18:52:10 · 513 阅读 · 0 评论 -
UVA 147 Dollars(完全背包)
题目链接: UVA 147 Dollars 题意: 美元基础面额分为100美元,50美元,20美元,10美元,5美元,2美元,1美元以及50美分,20美分,10美分,5美分。1美元等于100美分。输入一个金额(保证是5美分的倍数),问由基础面额组成这个金额有多少种方法? 如:20美分:5美分*4;5美分*2+10美分;10美分*2;20美分。共4种。 分析: 完全背包。每种基础面额只要合原创 2016-04-03 21:52:07 · 433 阅读 · 0 评论 -
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],原创 2016-04-03 22:03:34 · 907 阅读 · 0 评论 -
CF 431 C k-Tree(有序完全背包)
题目链接: CF 431 C k-Tree 题意: 有一个K叉树,每个节点都有k个子节点,每条边的权值依次是1,2,3…k。问由根节点出发经历节点的权值和组成n的路径有多少条?并且每条路径的最大权值不小于d。(d>=1)。结果模(1e9+7) 如:k=3,n=3,组成n的路径有:(1+1+1),(1+2),(2+1),(3)共4条,d=2时,结果是3。 分析: 题意也就是给你一个数n问由原创 2016-04-04 13:36:15 · 659 阅读 · 0 评论 -
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
题目链接: HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 题意: 有m元资金和n种大米,每种大米每袋的价格是price[i]price[i],每袋的重量是weight[i]weight[i],袋数是num[i]num[i]袋,问由这m元资金最多可以买到的大米的重量是多少?m元可以不用完。 分析: 多重背包。 用dp[i][j]表示在前i种大米中用j元最多可以买到的原创 2016-04-05 18:43:15 · 330 阅读 · 0 评论 -
POJ 2392 Space Elevator(多重背包)
题目链接: POJ 2392 Space Elevator 题意: 有n种梯子,每种梯子的单位长度是height[i],个数是num[i],这种梯子能达到的最大高度是limit[i]。问由这n种梯子互相叠加最多能达到的高度是多少? 分析: 多重背包问题,可行性分析,不过先把梯子按照limit从小到大排序。//64656K 657MS#include <cstdio>#include原创 2016-04-11 22:04:05 · 431 阅读 · 0 评论