背包问题
HelloWorld10086
追随大神的脚步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU - 2602 Bone Collector (01背包)
解析:01背包的模板题dp原创 2014-11-15 20:07:33 · 1108 阅读 · 1 评论 -
UVA - 562 Dividing coins (01背包)
题目大意:给一串数字作为硬币的币值,将这些硬币分给两个人A和B,要求越平均越好。 解析:01背包问题,先计算出总的钱数sum,让后在不超过sum/2的条件下把钱分给A,那么A和B的相差则为 sum - 2*A因为硬币的价格即为它的体积,则状态转移方程为:dp[i][j] = max(dp[i][j],dp[i-1][j - coin[i]] + coin[i]);原创 2014-11-13 15:07:25 · 1166 阅读 · 0 评论 -
UVA - 147 Dollars(完全背包)
题目大意:给定11种面值分别为$100, $50, $20, $10, $5, $2, $1, 50c, 20c, 10c , 5c 的钱,现在给定一个钱数,求出可以组成的种类数。解析:类似于uva 674,不过此题的精度太强了。int n=(int)(nn*100+0.5); 注意用long long ,种类数可能非常大用dp[v]表示:当前价格用的方法个数状态转移方原创 2014-11-07 18:54:38 · 838 阅读 · 0 评论 -
UVA - 10130 SuperSale (01背包)
题意:有N个人,每个人需要选择一些物品,要求求出团队整个价值的最大值解析:对每个人进行01背包搜寻最优解,他们的和,就是集体最优解原创 2014-11-22 20:56:17 · 893 阅读 · 0 评论 -
UVA - 357 Let Me Count The Ways(完全背包)
题目大意:给定五种硬币 1c, 5c, 10c, 25c, 50c,及一个面值额,看有多少种方法可以组成当前面值额。解析:比较简单的dp题用dp[v]表示:当前价格用的方法个数状态转移方程:dp[v + coin[i]] += dp[v];唯一原创 2014-11-09 19:20:29 · 787 阅读 · 0 评论 -
UVA 674 Coin Change(完全背包)
题目大意:有5种硬币,分别为50分,25分,10分,5分,1分。现在给你一个数字n,问你能用多少种方法组成该数字。例如:1111 = 5*2 + 111 = 1*1111 = 1*6 + 511 = 10*1 + 1共4种方法。解析:刚刚看这题时候没什么思路,看了gg学长(水果君的日常)的解题报告,才明白怎么做。这题有两种做法,递推和记忆化搜索。记忆原创 2014-10-29 16:17:11 · 863 阅读 · 0 评论 -
UVA - 624 CD (01背包)
解析:01背包,输出路径时由上一个状态推出下一个状态。原创 2014-11-22 20:12:13 · 727 阅读 · 0 评论 -
UVA - 12563 Jin Ge Jin Qu hao (01背包)
首先这题的题意要先读懂,而不是一看到01背包的问题就开始敲。题目大意:如果问一个麦霸:“你在KTV里面必唱的歌曲有那些”,得到的答案可能会包含古巨基的《劲歌金曲》,一般来说KTV不会在时间到的时候把正在唱的歌给切掉,而是会等它放完,例如还有15秒时再唱一首2分钟的歌,则实际上多唱了105秒。但是唱“神曲”《劲歌金曲》则相当于多唱了663秒。现在要求你在唱的歌曲的曲数尽量多的情况下,原创 2015-01-06 15:31:23 · 1264 阅读 · 0 评论 -
UVA 11137 Ingenuous Cubrency(完全背包)
题意:有1^3, 2^3, ...... , 21^3 种货币,给定一个价钱n,问有多少种组合方法。解析:完全背包问题,公式:dp[j + coin[i]] += dp[j];#include #include using namespace std;typedef long long ll;const int N = 20000;int coin[25];ll d原创 2015-01-29 17:32:30 · 876 阅读 · 0 评论 -
UVA 10306 e-Coins(二维完全背包)
题意:e-coin有两个价值x,y,现在给你一个价值n,给你几种e-coin,问你能否用最小的e-coin数得到所求的价值n*n=(x1+x2+...xn)^2+(y1+y2+...yn)^2。思路:物品个数没有限制,则就要想到完全背包。但是此时如何背包就要退而求解。dp[i][j] 表示能选到x的总和为i,y的总和为j时,最少的物品选择数。此时还有个隐性的物品背包属性,那就是原创 2015-01-29 16:55:45 · 751 阅读 · 0 评论 -
UVA 10465 Homer Simpson(完全背包)
问题描述:给出m,n,t,m为吃第一种汉堡的时间,n为第二种汉堡的时间,t为总时间,如果总时间全部用于吃汉堡,那么就输出最多能吃多少个汉堡,否则在剩余时间喝啤酒。输出且汉堡的数量最大,且喝啤酒的时间最小。解析:完全背包问题,即把01背包的时间从前往后dp。#include #include #include using namespace std;int dp[10005]原创 2014-12-28 08:51:44 · 939 阅读 · 0 评论 -
uva 10280 Old Wine Into New Bottles (有剪枝的完全背包)
思路参考了这篇博客:http://blog.youkuaiyun.com/yan_____/article/details/8671147AC代码:#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;typedef long long原创 2015-02-25 19:43:08 · 658 阅读 · 0 评论 -
CSU 1547 Rectangle(01背包)
题意 给你一个n个1*x和2*x的矩形,这些矩阵不能翻转,只能横着摆放。 现在要你用这些矩形拼成 2*m的矩形,问m最短是多少。解析 很显然2*x的矩阵的长度可以直接加在一起,关键看1*x的矩形,1*x的矩形最优的是选择两段和差距最小的,那么这就可以转换为求到 sum/2 最多可以组成多少的01背包问题。AC代码#include <cstdio>#include <cstring原创 2015-03-28 22:28:34 · 824 阅读 · 0 评论 -
HDU 5410 CRB and His Birthday(01背包+完全背包)
题意: CRB生日,妈妈要给他买礼物,妈妈有M元钱,这家店有N种礼物,因为店长和妈妈是熟人,所以若第i种礼物买x件的话,店长会给妈妈Ai*x+Bi颗糖果,现给出每种礼物的单价、Ai值与Bi值,问妈妈最多能拿到多少颗糖果。解析: 由于获得糖果的块数与礼物的件数不是简单的线性关系即还要加一个常数,则要将该问题当成01背包和完全 背包一起处理。如果要求得的关系是单纯的线性关系即y=a*x原创 2015-08-21 19:27:05 · 866 阅读 · 0 评论
分享