
===背包===
空白君有着一把空白键blanKey
即使世界如此残酷,我们仍是努力挣扎着
/*算了,退役了,不挣扎了QWQ*/
展开
-
HDU2602
最基本的01背包问题,没什么好说的#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>using namespace std;#define max(a,b) (a)>(b)?(a):(b)int main(){ int T; int n,v原创 2015-10-21 14:27:49 · 344 阅读 · 0 评论 -
Uva624 CD (记录路径)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N minutes long.原创 2015-10-23 16:37:27 · 429 阅读 · 0 评论 -
POJ3181 Dollar Dayz
原以为跟前面两题一样,结果WA了几次,想了好久猜想到高精度问题,如输入1000 100,就算用一个long long数组也会溢出,结果为负数。本弱现在对于大数问题还没怎么研究,于是看了一下其他大牛的博客题解,受益匪浅啊~~~特别推荐kuangbin的,详细,而且有一步一步推导,值得看看 kuangbin博客 点我点我点我 再次感谢kuangbin及其他诸多大牛,膜拜膜拜#include <io原创 2015-10-30 23:54:52 · 558 阅读 · 0 评论 -
poj2063 Investment
题目大意:给你一笔金额,你要将这比金额去投资,现在有t种股票,每种股票都有一个价值和年收益,问你如何投资在n年后的最大收益 并且股票的价值都是1000的倍数,所以后面优化,对每个价值除以1000测试数据: 1 //有多少组测试数据 10000 4 //10000代表初始金额,4代表4年之后的最大收益 2 //有两种股票 4000 400 //接下来2行,每行原创 2015-10-31 17:42:50 · 550 阅读 · 0 评论 -
UVa147 Dollars
UVa674 coin change的强化,一样的思路,不过先全部乘上个100就好了,只是在精度上必须注意double和long long,因为这个WA了2次,想了N久才想到。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algori原创 2015-10-30 19:50:47 · 403 阅读 · 0 评论 -
UVa674 Coin Change
完全背包入门,没什么好说的的。 先打表,速度会快很多。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;#define maxn 7500int dp[maxn];in原创 2015-10-30 18:46:05 · 506 阅读 · 0 评论 -
Hdu3466 Proud Merchants
[题目连接~点我点我点我](http://acm.hdu.edu.cn/showproblem.php?pid=3466)01背包变形,每做一次都是一次提高,这个题很有意思。这题因为涉及到q,所以不能直接就01背包了。因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m],再对第二个进行背包的时候,如果是普通的,应该会借用前面的d原创 2015-10-29 22:23:22 · 599 阅读 · 0 评论 -
hdu 2126 Buy the souvenirs
题目连接,点我点我点我题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数。思路:01背包问题,不过需要加多一维记录已买了多少物品,把买多少件物品看作价值,价钱看作花费,需要注意的是前一次和后一次递推中价值都是相差1的,dp[v][2] ,dp[v][0] 储存原本要记录的 dp ,即买了多少件物品,而 dp[v][1] 则记录方案数目。 dp[i][1] 都要初始化为原创 2015-10-29 19:36:56 · 491 阅读 · 0 评论 -
HDU2955 Robberies
题目链接实质是01背包问题,关键还是找出转移方程。 顺着题意做非常困难,需要转换思维,把最大风险指数改成最小逃跑所需指数,各银行的被抓指数也改成能逃跑的指数pi=1-pi,因此想要成功逃跑,总逃跑指数必须大于或等于最小逃跑所需指数,因为逃跑是独立事件,所以总逃跑指数=各逃跑成功指数相乘(我理解了好久才搞懂,可能也是我比较蠢的原因(┬_┬)重要!),在dp过程中设钱的数量为背包容量的大小 dp[j原创 2015-10-20 21:48:35 · 475 阅读 · 0 评论 -
poj1276 Cash Machine(多重背包)
题目点我点我点我题意:给你一个cash,然后有N种价值为D,数量为n的钱币,要求凑出最接近cash的价值。 多重背包。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;原创 2015-11-12 23:49:40 · 392 阅读 · 0 评论 -
hdu1059 Dividing (多重背包)
链接点我点我点我 简单多重背包#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int dp[120100],a[7];int v,k; //v为体积void Zero原创 2015-11-12 22:12:44 · 383 阅读 · 0 评论 -
POJ2392 Space Elevator (多重背包)
题目点我点我点我题意:有一群奶牛向上太空,然后要用一块块塔搭上去,给出K种类型的塔,每种类型单块高度为h,在a高度一下都可以搭建,有c块。思路:多重背包问题,在进行多重背包之前要进行一次排序,将最大高度小的放在前面,只有这样才能得到最优解,如果将大的放在前面,后面有的小的就不能取到,排序之后就可以进行完全背包了。 注意这题只有花费,没有价值,利用dp记录能搭建的所有高度的情况,能搭原创 2015-11-13 16:46:56 · 471 阅读 · 0 评论 -
hdu2191 题目太长不打了orz(多重背包)
第一次见这么长的题目…… 多重背包,可以说背包九讲的模版题。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int v;int dp[105],p[105],h[105原创 2015-11-12 22:42:05 · 524 阅读 · 0 评论 -
UVa 562 Dividing coins
题目连接 题目大意:有一堆硬币,要设法平均分成价值相等的两份,输出两份相差的价值。 思路:所有硬币的总价钱的一半看成容量v,使之装的价值最高,即转化为01背包问题,最后总价钱减去背包的价值的两倍即可。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#i原创 2015-10-27 22:58:23 · 476 阅读 · 0 评论 -
POJ3624 Charm Bracelet
01背包,水过………………………………#include <iostream>#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>#include <algorithm>using namespace std;int main(){ int n,m; int i,j; i原创 2015-10-22 22:36:56 · 457 阅读 · 0 评论 -
HDU2546
最贵的选择在最后买,当然,此时钱数要大于5元,背包容量就是v-5,物品就是i-1个,转移方程还是那个样子。 状态转移方程为:f[j]=max(f[j],f[j-price[i]]+price[i]) , f[j]表示买前i件物品,预算为j时的最大花销。 另外需要注意的是要考虑到一开始就少于5元的情况,就直接输出了,一开始没考虑到WA了好多次( # ▽ # )#include <iostream>原创 2015-10-21 17:37:12 · 446 阅读 · 0 评论 -
ZOJ3623 Battle Ships
题意: 对方有L滴血,我们有n种船可以选择,每种船建造时间为t,建好后每秒对敌方造成l点伤害,问最少多少时间能干掉对方。 思路:以时间为容量,对对方造成的伤害为价值,完全背包,可以理解成先攻击再造船,因为这两者并没有冲突,状态转移方程:dp[j+time[i]]=max(dp[j]+j*time[i]);dp[j]表示在j这个时间,所造成的最大伤害。这样就可以枚举时间,在每个特定的时间内,枚举船原创 2015-11-01 14:08:27 · 449 阅读 · 0 评论