随笔分类 - 动态规划
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5009 题目要求对空序列染成目标颜色序列,对一段序列染色的成本是不同颜色数的平方。 这题我们显然会首先想到用DP去解决,dp[i] = min( dp[i] , dp[j] + cost(i , j) )。但是枚举
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5985 作为队里负责动态规划的同学,做不出来好无奈啊。思考了一个下午,最好还是参考了别人的思想才写出来,数学啊!!! 这题随着K的增长,贡献的数值越来越少,所以只要K足够大(100左右就够了,一开始写30WA了),
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2639 在背包的基础上维护一个size<=K的最大值集合,为什么维护K个就好了呢,因为如果当前状态有多余K个最优解,前K个就足够转移到下一状态并占满前K了,所以K个之后的都没必要维护。
阅读全文
摘要:整数划分变形,由2^k组成。 整数划分中一个节约内存的技巧,平时我们使用dp[i][j]维护用不大于j的数组合成i的方案数,所以必须dp[i-j][j]->dp[i][j]。这样就需要二位,如果用一维dp[i-j]->dp[i]就会导致重复选取的情况。其原因在于dp[i-j]在计算的过程已经把大于j
阅读全文
摘要:http://acm.split.hdu.edu.cn/showproblem.php?pid=3366 读题的时候没发现这个P Q 1-P-Q是全集的划分,以为是独立事件,写错了转移方程233 先贪心得排个序,排序规则我们可以通过假设A B/B A这两种顺序,然后推导概率和的大小关系来得出。 然后
阅读全文
摘要:高中知识,求全排列组合后,去重方法是除以相同物品的数量阶乘。那么如果我们再构造母函数的时候,就把阶乘作为每一项的分母,那求出来就可以直接乘上全排列系数了。
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4632 问题要求回答一串字符串中回文子序列的数量,例如acbca就有 a,c,b,c,a,cc,aa,aca,aca(注意这两个aca的c是不同位置的c,都要累计),aba,cbc,acca,acbca.
阅读全文
摘要:题目链接:http://poj.org/problem?id=2955 这题要求求出一段括号序列的最大括号匹配数量 规则如下: the empty sequence is a regular brackets sequence, if s is a regular brackets sequence
阅读全文
摘要:题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=746 要求对一个n的整数插入m个乘号,求最大结果。 构造dp:dp[i][j]表示枚举至j时,插入i个乘号的状态。 那么dp[i][j]=dp[i-1][k]*sum(k+1,j)。
阅读全文
摘要:有若干堆石子,每次只能合并相邻石子堆,每次合并的开销是两堆石子总和。求合并所有石子的最小开销。 首先有一个算法叫GarsiaWachs。这个算法思想是,当有三堆石子 a,b,c,其合并开销有两种:先合并ab,(a+b)+((a+b)+c),先合并bc,(b+c)+((b+c)+a)=>a,c即判断a
阅读全文
摘要:题目是求最长回文子序列的长度,不过其区间的选取是有点讲究的。 首先把源串复制一遍,放在后面以解决循环的问题。随后用动态规划求其最长回文子序列。这里不能直接把最大值求出来就完事,题目要求了不能走重复的路,换言之,其区间窗口最长只能为n。 一开始我以为只要把最大值求出来和n取min就好,之后发现这个最大
阅读全文
摘要:用dp来求最短路,虽然效率低,但是状态的概念方便解决最短路问题中的很多限制,也便于压缩以保存更多信息。 本题要求访问全图,且每个节点不能访问两次以上。所以用一个三进制数保存全图的访问状态(3^10,空间是足够的),用dp[z+bit[j]][j]=dp[z][i]+ct[i][j]就可以表示,从上一
阅读全文
摘要:注意最长公共子串(Longest CommonSubstring)和最长公共子序列(LongestCommon Subsequence, LCS)的区别:子串(Substring)是串的一个连续的部分,子序列(Subsequence)则是从不改变序列的顺序,而从序列中去掉任意的元素而获得的新序列;更
阅读全文
摘要:母题:矩阵中每个点有权值,每经过一个点就累加权值,求从a点到b点的最优(最大)路线。 题型1: 从左上到右下,只能向下或者向右 for 行 for 列 dp=max dp左,dp上; 扫一遍就行 有时可能会是bfs+记忆化搜索,仔细看题 题型2: 从左上到右上,只能向下、上、右,不能走重复的点。 这
阅读全文
摘要:比赛的时候写了个记忆化搜索,超时了。 后来学习了一下,这种题目应该用拓扑排序+DP来做。 dp[][]保存走到[第i个节点][走过j个点]时所用的最短时间。 pre[][]用前驱节点求路径 然后遍历一下dp[n][],求满足t范围的最大下标。
阅读全文