ACM_动态规划
文章平均质量分 76
Christine1024
这个作者很懒,什么都没留下…
展开
-
zoj 3351 Bloodsucker
转自:http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html 题目大意: 说你手里有n个生物,n-1个人,1个吸血鬼。每一天,你从这堆里面随机挑出两头来,如果是不同种,那么人就有p的概率会被同化为吸血鬼。 求一个期望,问给定n和p的情况下,所有人变吸血鬼的期望天数D。 做法: 首先是要看出最基本的式子,就转载 2013-08-09 10:38:07 · 847 阅读 · 0 评论 -
状态压缩DP POJ 2411 Mondriaan's Dream
【题目链接】http://poj.org/problem?id=2411 【题目大意】求用1*2的矩形格子填满n*m的格子的方案数 ,1*2的格子可以横着放也可以竖着放 【解题思路】用11表示格子横着放, 01表示格子竖着放(0在该行,1在下一行)。这样按行dp只需要考虑两件事儿,当前行&上一行,是不是全为1,不是说明竖着有空(不可能出现竖着的00),另一个要检查当前行里有没有横放的,但为奇数原创 2013-10-19 23:46:59 · 781 阅读 · 0 评论 -
POJ 3254 Corn Fields
题目大意:农夫约翰有一个M*N的矩形牧场,想在牧场里面种植一些植物,但是这些植物不能够相邻,而且有些地是不能种植的,求共有多少种种植方式。 解题思路:把每一行的状态用二进制的数表示,1表示在该处种植植物,反之,用0表示。根据题意可知:两个相邻的行或者列不能同时为1,且不能种植植物的地方用0表示。用dp[state][i]表示状态为state时,到第i行符合条件的方案数 则状态转移方程为原创 2013-10-09 22:58:46 · 627 阅读 · 0 评论 -
ZOJ 3640 Help Me Escape
题目大意:一个魔鬼被上帝关在一个洞穴里,洞穴有n条路可以出去,第i条路的困难程度为ci。魔鬼若想从第i条路走出去的条件是魔鬼当前的战斗力f大于等于ci ,且魔鬼用ti天走出去的,ti = (1+ sqrt(5))/ 2 * c[i] * c[i]。如果f 解题思路:简单的概率dp,用记忆化搜索实现。比较容易理解~~ 代码实现: #include #include #原创 2013-10-08 12:55:51 · 772 阅读 · 0 评论 -
hdu 3853 LOOPS
题目大意:给一个R * C的格子,每个格子(i,j)到达(i,j)、(i,j+1)、(i+1,j)的概率分别为p1,p2,p3(p1+p2 +p3 = 1),每走一个格子需要花费的魔力为2,求从(1,1)走到(R,C)所需要魔力的期望。 解题思路:果然是个大水题啊~~ 很容易退出状态转移方程,不过有个小trick,就是当格子(i,j)的p1=1,即格子只能留在当前的格子处时,dp[i]原创 2013-10-08 10:31:10 · 804 阅读 · 0 评论 -
hdu 4336 Card Collector
题目大意:一种零食里共有n种卡片,每一袋可能有一张,也可能没有,第i张出现的概率为p[i],求集齐n种卡片需要零食袋数的期望。 解题思路:状态压缩dp。用 i 的二进制中1的数位 表示还没有收集到的卡片,0表示已收集到的,那么每次购买的零食有三种情况: 1、里面有卡片且为没有收集到的;2、里面有卡片且已经收集到了;3、里面没有卡片。 用dp[i]表示当前收集到的卡片为状态 i 时,到集原创 2013-10-06 21:10:21 · 652 阅读 · 0 评论 -
POJ 3071 Football
题目大意:有2^n个足球队,编号依次为1,2,3……2^n,按照递增的顺序每两个相邻的队伍之间进行比赛,赢的队伍进入下一轮,然后再按照同样的规则进行比赛,共进行n轮比赛,最后剩下的一个队伍即为冠军,求最可能成为冠军的队伍。输入为2^n行2^n列,第i 行第 j 列的值p[i][j] 表示第i个队伍打败第j个队伍的概率。 解题思路:据大神说,这是个简单的dp题,于是我就一直推啊推,历经两个原创 2013-10-07 11:03:04 · 712 阅读 · 0 评论 -
最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
原文地址:http://www.cnblogs.com/zhangchaoyang/articles/2012070.html 最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简转载 2013-04-13 08:41:06 · 966 阅读 · 0 评论 -
HDU 4681 String
题目大意:找到一个字符串D,使得D是字符串A的子序列,D是字符串B的子序列,同时C是D的子串(PS:请注意子串与子序列的区别) 解题思路:首先求出A、B的最长公共子序列, 和A、B逆序的最长公共子序列,分别用数组 max1 和 max2 记录。然后分别在字符串A和B中找到C串的个数,假设分别为n、m,并记录在A、B串中每找到的C串的起始和终止位置,分别放在数组sa、ja、sb、jb,枚举原创 2013-08-15 18:52:47 · 660 阅读 · 0 评论 -
状态压缩DP POJ 1185 炮兵阵地
【题目链接】http://poj.org/problem?id=1185 【题目大意】在平原(P)上可以布置一支炮兵部队,而在山地(H)上不能够部署炮兵部队。而且每两个炮兵之间的间隔(横纵)要大于等于 2,求最多能够摆放多少的炮兵部队。 【解题思路】经典状态压缩DP。每行炮兵的状态 i,只与i-1,和i-2行状态有关。若用0表示此处不能放,1表示能放。则根据题意可知:1、有些地原创 2013-10-19 17:08:50 · 921 阅读 · 0 评论