03 2016 档案

HDU-1520 Anniversary party(树形DP)
摘要:题目大意:一棵树,每个节点都带权。从中取出一些节点,并且子节点不能与父节点同时取,求能取得的最大值。 题目分析:定义状态dp(u,0/1)表示u点不取/取。则状态转移方程为: dp(u,1)=sum(dp(v,0)) dp(u,0)=sum(max(dp(v,1),dp(v,0))) 其中,v为u的 阅读全文

posted @ 2016-03-31 21:05 20143605 阅读(148) 评论(0) 推荐(0)

HDU-2196 Computer (树形DP)
摘要:题目大意:在一棵带边权的有根树中,对于每个点,找出它与离它最远的那个点的之间的距离。 题目分析:对于一个点,离它最远的点只有两种情况,一是它到叶子节点的最远距离,一是与它父亲的距离加上他的父亲到叶子节点的最远距离。因为它的父亲到叶子的最远距离的那条路径可能恰好经过它自己,所以还要求出每个点到叶子节点 阅读全文

posted @ 2016-03-31 19:27 20143605 阅读(404) 评论(0) 推荐(0)

HDU-1561 The more, The Better (树形DP+分组背包)
摘要:题目大意:给出一片森林,总共有n个点,并且都有权值。从中选出m个,使权值和最大。其中,选某个节点之前必须先选其父节点。 题目分析:给所有的树都加一个共同的权值为0的根节点,使森林变成一棵树。定义状态dp(u,k)表示在以节点u为根节点的组中选k个节点的最大权值。则状态转移方程为: dp(u,k)=m 阅读全文

posted @ 2016-03-31 19:20 20143605 阅读(167) 评论(0) 推荐(0)

HDU-3853 LOOPS(概率DP求期望)
摘要:题目大意:在nxm的方格中,从(1,1)走到(n,m)。每次只能在原地不动、向右走一格、向下走一格,概率分别为p1(i,j),p2(i,j),p3(i,j)。求行走次数的期望。 题目分析:状态转移方程很容易得到: E(i,j)=p1(i,j)*E(i,j)+p2(i,j)*E(i,j+1)+p3(i 阅读全文

posted @ 2016-03-27 21:26 20143605 阅读(203) 评论(0) 推荐(0)

HDU-4035 Maze (概率DP求期望)
摘要:题目大意:在一个树形迷宫中,以房间为节点。有n间房间,每间房间存在陷阱的概率为ki,存在出口的概率为ei,如果这两种情况都不存在(概率为pi),那么只能做出选择走向下一个房间(包括可能会走向上一个房间)。根节点为1,当遇到陷阱时必须返回到根节点1处重新开始,当遇到出口时,走出迷宫。问从开始到走出迷宫 阅读全文

posted @ 2016-03-27 11:41 20143605 阅读(483) 评论(0) 推荐(0)

HDU-4089 Activation (概率DP求概率)
摘要:题目大意:一款新游戏注册账号时,有n个用户在排队。每处理一个用户的信息时,可能会出现下面四种情况: 1.处理失败,重新处理,处理信息仍然在队头,发生的概率为p1; 2.处理错误,处理信息到队尾重新排队,发生的概率为p2; 3.处理成功,队头信息处理成功,出队,发生的概率为p3; 4.服务器故障,队伍 阅读全文

posted @ 2016-03-26 21:02 20143605 阅读(560) 评论(0) 推荐(0)

HDU-4405 Aeroplane chess(概率DP求期望)
摘要:题目大意:一个跳棋游戏,每置一次骰子前进相应的步数。但是有的点可以不用置骰子直接前进,求置骰子次数的平均值。 题目分析:状态很容易定义:dp(i)表示在第 i 个点出发需要置骰子的次数平均值。则状态转移方程为: dp(i)=singma(pk*dp(i+k))+1 (如果在 i 处必须置骰子才能前进 阅读全文

posted @ 2016-03-26 11:19 20143605 阅读(181) 评论(0) 推荐(0)

ZOJ-3329 One Person Game (有环期望问题)
摘要:题目大意:有3个骰子,各有k1,k2,k3个面,面值为1~ki。还有一个计数器,初始值为0,统计所有的面值和。每次同时置这三个骰子,如果第一个骰子的朝上的值为a、第二个值为b、第三个值为c,那么将计数器置为零。直到计数器的值大于n时结束,求次数的期望值。 题目分析:这道题的状态转移方程不难写。定义状 阅读全文

posted @ 2016-03-26 00:21 20143605 阅读(198) 评论(0) 推荐(0)

POJ-2096 Collecting Bugs (概率DP求期望)
摘要:题目大意:有n种bug,m个程序,小明每天能找到一个bug。每次bug出现的种类和所在程序都是等机会均等的,并且默认为bug的数目无限多。如果要使每种bug都至少找到一个并且每个程序中都至少找到一个bug,小明平均需要找几天? 题目分析:定义状态dp(i,j)表示找到了 i 种程序,并且出现在了 j 阅读全文

posted @ 2016-03-25 22:27 20143605 阅读(246) 评论(0) 推荐(0)

POJ-3744 Scout YYF I (矩阵优化概率DP)
摘要:题目大意:有n颗地雷分布在一条直线上,有个人的起始位置在1,他每次前进1步的概率为p,前进两步的概率为1-p,问他不碰到地雷的概率。 题目分析:定义状态dp(i)表示到了dp(i)的概率,则状态转移方程为dp(i)=p*dp(i-1)+(1-p)*dp(i-2)。要想安全通过x(i)到达x(i)+1 阅读全文

posted @ 2016-03-25 20:03 20143605 阅读(237) 评论(0) 推荐(0)

POJ-1180 Batch Scheduling (分组求最优值+斜率优化)
摘要:题目大意:有n个任务,已知做每件任务所需的时间,并且每件任务都对应一个系数fi。现在,要将这n个任务分成若干个连续的组,每分成一个组的代价是完成这组任务所需的总时间加上一个常数S后再乘以这个区间的系数和。求最小代价。 题目分析:分组求最优值得问题。不过,这道题采用倒推可能要好做一些。定义状态dp(i 阅读全文

posted @ 2016-03-24 11:01 20143605 阅读(406) 评论(0) 推荐(0)

BZOJ-1010 玩具装箱toy (斜率优化)
摘要:题目大意:将n个数分成若干组,并且每组的数在原数组中应是连续的,每组会产生的代价为sum(i)-sum(j)+i-j-1-m,m为已知的常数。求最小代价。 题目分析:定义dp(i)表示将前 i 个元素分好组后产生的最小代价,状态转移方程很显然了: dp(i)=min(dp(j)+[sum(i)-su 阅读全文

posted @ 2016-03-22 00:10 20143605 阅读(166) 评论(0) 推荐(0)

HDU-3507 Print Article (斜率优化)
摘要:题目大意:将n个数分成若干个区间,每个区间的代价为区间和的平方加上一个常数m,求最小代价。 题目分析:定义状态dp(i)表示前 i 个数已经分好的最小代价,则状态转移方程为 dp(i)=min(dp(j)+(sum(j)-sum(i))^2)+m <1>。将这个方程整理一下得到: dp(i)=min 阅读全文

posted @ 2016-03-21 19:37 20143605 阅读(530) 评论(0) 推荐(0)

HDU-5050 Divided Land (二进制求GCD)
摘要:题目大意:将两个二进制数的GCD用二进制数表示出来。 题目分析:这道题可以用java中的大数类AC。 代码如下: 不过,也可以用二进制来求GCD。 gcd(a,b)=gcd(a/2,b/2)*2 (a,b均为偶数) gcd(a,b)=gcd(a,b/2) (a为奇数,b为偶数) gcd(a,b)=g 阅读全文

posted @ 2016-03-19 21:48 20143605 阅读(315) 评论(0) 推荐(0)

HDU-3506 Monkey Party (环形石子合并)
摘要:题目大意:n堆石子围成一圈,每堆石子的块数已知,每次可以将相邻的两堆合并到一堆,块数变为两堆之和,代价也为两堆石子块数之和。求合并到一堆的最小代价。 题目分析:先通过将前n-1依次个移到第n个后面,将环变成线。定义状态dp(i,j)表示将区间(i,j)的石子合并所需的最小代价,则状态转移方程为dp( 阅读全文

posted @ 2016-03-19 16:31 20143605 阅读(1679) 评论(0) 推荐(0)

HDU-3480 Division (四边形不等式优化DP)
摘要:题目大意:将n个数分成m组,将每组的最大值与最小值的平方差加起来,求最小和。 题目分析:先对数排序。定义状态dp(i,j)表示前 j 个数分成 i 组得到的最小和,则状态转移方程为dp(i,j)=min(dp(i,k-1)+w(k,j)),其中w(i,j)=(a[i]-s[j])*(a[i]-a[j 阅读全文

posted @ 2016-03-19 11:12 20143605 阅读(439) 评论(0) 推荐(1)

HDU-2829 Lawrence (DP+四边形不等式优化)
摘要:题目大意:有n个敌方军火库呈直线排列,每个军火库有一个值vi,并且任意相邻的两个库之间都有通道相连。对于任意一条连起来的军火库链,它对我方的威胁可以用函数w(i,j)表示为:w(i,j)=vi*sum(i+1,j)+w(i+1,j) i<j; w(i,j)=0 i=j; 现在,你有m个炸弹,每颗可以 阅读全文

posted @ 2016-03-18 00:21 20143605 阅读(237) 评论(0) 推荐(0)

POJ-1160 Post Office (DP+四边形不等式优化)
摘要:题目大意:有v个村庄成直线排列,要建设p个邮局,为了使每一个村庄到离它最近的邮局的距离之和最小,应该怎样分配邮局的建设,输出最小距离和。 题目分析:定义状态dp(i,j)表示建设 i 个邮局最远覆盖到第 j 个村庄时最小距离和。容易得到dp(i,j)=min(dp(i-1,k-1)+w(k,j)), 阅读全文

posted @ 2016-03-17 21:32 20143605 阅读(226) 评论(0) 推荐(0)

CoderForce 180D-Name (构造+回溯)
摘要:题目大意:给两个字符串s,t,用s中的字符重新组合构造出按字典序最小的但比t大的新字符串。 题目分析:先统计s中各个字母出现的次数,然后从t的左端向右端依次构造出新串的每一位上的字母。这个过程我是用回溯实现的,因为只需进行到字典序比t大就可以立即停止,所以实际上花不了多少时间。 代码如下: 阅读全文

posted @ 2016-03-16 23:46 20143605 阅读(252) 评论(0) 推荐(0)

UVA-1322 Minimizing Maximizer (DP+线段树优化)
摘要:题目大意:给一个长度为n的区间,m条线段序列,找出这个序列的一个最短子序列,使得区间完全被覆盖。 题目分析:这道题不难想,定义状态dp(i)表示用前 i 条线段覆盖区间1~第 i 线段的右端点需要的最少数目,状态转移方程为dp(i)=min(dp(j))+1。其中第 j 条线段与第 i 条线段有交集 阅读全文

posted @ 2016-03-12 17:09 20143605 阅读(821) 评论(0) 推荐(1)

UVA-1579 Matryoshka (区间DP)
摘要:题目大意:n个俄罗斯套娃,都有相应的编号,每次可将两个相邻的套娃组合成一组,每次合成只能小的放到大的里面,并且是逐层嵌套。问将这n个套娃分成若干个组,并且每组都是编号从1开始的连续序列,最少需要几步。 题目分析:很显然的区间DP,只不过每次DP未必是在整个区间,而是在子区间上。 代码如下: # in 阅读全文

posted @ 2016-03-09 22:38 20143605 阅读(675) 评论(0) 推荐(0)

UVA-10271 Chopsticks (线性DP)
摘要:题目大意:在n个数中,找出k个三元组(a<=b<=c),求最小的(a-b)*(a-b)之和。 题目分析:将所有数从大到小排序,定义dp(i,j)表示前 i 个数中找出 j 个三元组时的最小和,则状态转移方程为dp(i,j)=min(dp(i-1,j),dp(i-2,j-1)),第二种决策是在前i-1 阅读全文

posted @ 2016-03-07 21:55 20143605 阅读(252) 评论(0) 推荐(0)

NOJ-1581 筷子 (线性DP)
摘要:题目大意:有n支筷子,已知长度,定义一双筷子的质量等于长度的平方差,问能否分成k双?若能,输出所有筷子的最小质量和。 题目分析:先将筷子按长度从小到大排序,定义状态dp(i,j)表示将前 i 支筷子分成 j 双的最小质量和,则状态转移方程为dp(i,j)=min(dp(i-1,j),dp(i-2,j 阅读全文

posted @ 2016-03-07 19:51 20143605 阅读(207) 评论(0) 推荐(0)

UVA-242 Stamps and Envelope Size (DP)
摘要:题目大意:给一些邮票的面值组合,找出在限定的张数范围内能组合出连续最大值得那个组合。 题目分析:状态可以这样定义:dp(k,u)表示u能否用k张邮票组合成。状态转移方程很显然了。 代码如下: # include<iostream> # include<cstdio> # include<cstrin 阅读全文

posted @ 2016-03-01 16:59 20143605 阅读(300) 评论(0) 推荐(0)