随笔分类 - { 动态规划 }
摘要:题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007。 不难联想到这题和HDU2196是一种类型的树形DP,因为它们都要分别求各个点的答案。然后解法也不难想: dp0[u]表
阅读全文
摘要:题目大概说有平面有n个点,从1点出发走到n点,每一步只能走到序号比当前更大的点且走的序列不能包含给定的m个序列中的任何一个,问1走到n的最短路。 用m个序列建个AC自动机,后缀包含整个序列的结点标记一下,然后用dp[u][S]表示走到u点且走的序列的后缀状态是自动机上第S个结点的最短路,这样在AC自
阅读全文
摘要:题目大概说有个n×m的格子,有两种走法,每种走法都是一个包含D或R的序列,D表示向下走R表示向右走。问从左上角走到右下角的走法有多少种走法包含那两种走法。 D要走n次,R要走m次,容易想到用AC自动机上的DP解决: 用两种走法的序列构造AC自动机 dp[i][j][S][k]表示D用了i个R用了j个
阅读全文
摘要:题目大概说一棵n个结点的树,每个结点都可以安装某一规格的一个塔,塔有价格和能量两个属性。现在一个敌人从1点出发但不知道他会怎么走,如果他经过一个结点的塔那他就会被塔攻击失去塔能量的HP,如果HP小于等于0敌人就挂了。任务就是在总花费不超过m的条件下在各个结点安装塔,求能预防的敌人的HP的最大值。 状
阅读全文
摘要:题目大概说一棵n个结点树,每个结点都有宝藏,走过每条边要花一定的时间,现在要在t时间内从结点1出发走到结点n,问能获得最多的宝藏是多少。 放了几天的题,今天拿出来集中精力去想,还是想出来了。 首先,树上任意两点间最短的那条路径是唯一的,且不管怎么走一定都会走过那条路径上的所有点,也就是说整个行程可以
阅读全文
摘要:题目大概说一棵树有边权,要删掉一些边,使叶子到达不了树根1且删掉边的权和小于等于m,问删掉边中最大权的最小值能是多少。 考虑问题规模,与转移的时间复杂度,用这么个状态dp: 转移略蛋疼,初始值的设定之类的感觉有点不统一。。反正最后感觉自己写得有点挫。。
阅读全文
摘要:题目大概是给一棵n个结点边带权的树,记结点i到其他结点最远距离为d[i],问d数组构成的这个序列中满足其中最大值与最小值的差不超过m的连续子序列最长是多长。 各个结点到其他结点的最远距离可以用树形DP解决,HDU2196。 而那个最长的连续子序列可以用单调队列求。。搞了挺久看了解法体会了下。。简单来
阅读全文
摘要:题目大概说一个1×n的格子,每个格子都有一定的黄金,起点在1,终点在n,通过投掷6面骰子前进与骰子点数一样的步数,如果会超过n就重新投,每到一个格子就获得其中的黄金。问到达n能得到的黄金数目的期望。 求概率是正推,求期望是逆推。。容我慢慢体会。。 期望: 也可以先求到每个格子的概率,然后概率×黄金数
阅读全文
摘要:题目,求最短的包含所有n个DNA片段且不包含任何一个病毒片段的序列。 容易用所有DNA片段和病毒片段建一个AC自动机,构造fail时处理一下各个结点后缀是DNA或者病毒的情况,然后dp[S][u]表示包含DNA片段的集合是S的且后缀状态是自动机第u个结点的最短序列长度,然后顺着AC自动机避开病毒串转
阅读全文
摘要:题目大概是一棵树,每个结点都有若干个苹果,求从结点1出发最多走k步最多能得到多少个苹果。 考虑到结点可以重复走,容易想到这么个状态: 转移就是: 不过这样提交WA。。然而看不出哪里有错。。无奈看别人代码,发现转移少考虑了一种情况—— 真的想不到。。
阅读全文
摘要:题目,求包含所有的给定的n个DNA片段的序列的最短长度。 AC自动机上的DP题。
阅读全文
摘要:题目大概是给一棵树,问最少删几条边可以出现一个包含点数为p的连通块。 任何一个连通块都是某棵根属于连通块的子树的上面一部分,所以容易想到用树形DP解决: 转移好烦,写得我好累好累。。还好1A了。。
阅读全文
摘要:题目是说给一棵树,叶子结点有负权,边有正权,问最多能选多少个叶子结点,使从叶子到根的权值和小于等于0。 考虑数据规模表示出状态:dp[u][k]表示在u结点为根的子树中选择k个叶子结点的最小权值 最后就从d[1][k]中找满足的最大的k。不过单这样转移时间复杂度是指数级,显然这题就是用树上背包了。
阅读全文
摘要:题目是给一张边有向的树形图。要选出首都的点,首都要都能走到其他点,因此要反转一些边的方向。问可以选哪几个点作为首都,使它们所需反转边的数量最少。 这题挺好想的,因为做过HDU2196。 首先就不妨设正向边权值为0,反向边权值为1,那样就是各个点出发到其他点经过边所需的最少权值和。 然后对于每个点,分
阅读全文
摘要:和LightOJ1257一样,之前我用了树分治写了。其实原来这题是道经典的树形DP,感觉这个DP不简单。。 dp[0][u]表示以u为根的子树中的结点与u的最远距离 dp[1][u]表示以u为根的子树中的结点与u的次远距离 这两个可以一遍dfs通过儿子结点转移得到。显然dp[0][u]就是u的一个可
阅读全文
摘要:化简一下那个方差得到:$$\sqrt\frac{(\Sigma_{i=1}^nx_i)-n\bar x^2}{n}$$ 除了$\Sigma_{i=1}^nx_i$这部分未知,其余已知,而那部分显然越大越好,很容易用DP去转移求得。 dp[n][x1][y1][x2][y2]表示当前要切的矩形是(x1
阅读全文
摘要:题目大概是给几个DNA片段,求构造一个长度n的字符串的方案数,要求这个字符串每个位置的字符都属于某个包含于此字符串的DNA片段。 把那些DNA片段建一个AC自动机。考虑状态的表示: dp[len][x][k]表示长度len且后缀状态为自动机结点x且后k位还不满足要求的方案数 然后转移就是向自动机上四
阅读全文
摘要:题目求两个字符串s1,s2不同的LCS个数。 经典的求LCS的DP是这样的: LCS[i][j]表示s1[0...i]和s2[0...j]的LCS LCS[i][j]从LCS[i-1][j-1]+1(s1[i]==s2[j])或max(LCS[i-1][j],LCS[i][j-1])(s1[i]!=
阅读全文
摘要:题目大概是,一个数轴上n个线段,每个线段都有起始坐标、长度和权值,问从中取出没有公共交点的线段的最大权和。 取k次是个经典的最小费用最大流问题,不过这题建容量网络有20W个点,离散化最多也要6W个点,跑不动最小费用最大流的样子。。 其实这题也是个经典的DP,区间图最大权独立集问题,《挑战程序设计竞赛
阅读全文
摘要:题目大概是给一张有向图,有n张票,每张票只能使用一次,使用一张票就能用pi匹马拉着走过图上的一条边,走过去花的时间是边权/pi,问从a点走到b点的最少时间是多少。 用dp[u][S]表示当前在u点且用过的票集合是S的最少时间,丢进SPFA更新。 1 #include<cstdio> 2 #inclu
阅读全文