随笔分类 -  动态规划

摘要:数位DP加二分 阅读全文
posted @ 2016-08-25 19:41 vwirtveurit 阅读(257) 评论(0) 推荐(0)
摘要:渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了。 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1两个虚拟的狼,状态转移方程如下: dp[i][j] = min(dp[i][j], dp[i][k] 阅读全文
posted @ 2016-08-07 18:22 vwirtveurit 阅读(316) 评论(0) 推荐(0)
摘要:先记录以1为根时每个节点子树儿子节点的最大与次小值,询问x, y时,先判断x在不在y的子树范围内,若不在,结果为y的儿子结点,后继的最小值。 若x在y的子树范围内,若y儿子最小值是x的前驱,从次小值与父亲节点转移,否则从最小值与父亲节点转移。 阅读全文
posted @ 2016-08-06 22:50 vwirtveurit 阅读(324) 评论(0) 推荐(0)
摘要:状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解。 阅读全文
posted @ 2016-08-05 11:33 vwirtveurit 阅读(235) 评论(0) 推荐(0)
摘要:应该是machine 和POJ3783 Balls类型相似。 现在上界为i元,猜错次数最多为j时,开始猜测为k元,有两种情况: 1 猜中:(i - k + 1) * dp[i - k][j] 2 猜不中 k * dp[k - 1][j - 1] 两种情况的均值即为第一次猜测为k时的期望,1 <= k 阅读全文
posted @ 2016-08-04 12:48 vwirtveurit 阅读(219) 评论(0) 推荐(0)
摘要:一个长度为n的序列,删除任意长度为l的连续子序列后,求剩下的序列的最长公共子序列。 先求出以第i个元素为开始的LIS的长度,再一次循环,对所要求的结果更新 } 阅读全文
posted @ 2016-07-26 21:04 vwirtveurit 阅读(201) 评论(0) 推荐(0)
摘要:截至写博客为止,貌似这是网上第一个采用数学公式来处理的。 网上的题解都是DFS或是动态规划,但感觉可以推公式直接用数学的方法处理,想了好久,终于推出公式。 题意:一个长度为n的由数字1,2,3,4 组成的序列,求至少有一对1,4相邻且2或3必须用上的方法数。 思路: 计A为有1,4相邻的方法数,B为 阅读全文
posted @ 2016-07-05 21:32 vwirtveurit 阅读(306) 评论(0) 推荐(0)
摘要:题意:给定两个字符串(可能为空串),求这两个串交叉组成新串的子串中的回文串的最大长度。 布尔型变量dp[i][j][k][l]表示串a从i到j,b从k到l能否组成新串,初始化为false,则采取区间动态规划。(从1计数) 1 #include<algorithm> 2 #include<cmath> 阅读全文
posted @ 2016-07-05 11:46 vwirtveurit 阅读(415) 评论(0) 推荐(0)
摘要:讲解见http://www.cnblogs.com/IMGavin/p/5621370.html, 4 可重组合 dfs枚举子树的节点个数,相乘再累加 阅读全文
posted @ 2016-07-04 10:40 vwirtveurit 阅读(360) 评论(0) 推荐(0)
摘要:开始写成01背包的形式,求m元可买物品价值的最大值 dp[j] = max(dp[j], dp[j - pri[i]] + pri[i]) 结果为m - dp[m] 但后来发现是有问题的, 比如这组过不去 5 15 14 13 13 42 60 正解应该m-5 >= 0时买尽量多的物品,然后剩下的钱 阅读全文
posted @ 2016-07-04 10:33 vwirtveurit 阅读(253) 评论(0) 推荐(0)
摘要:本文持续更新…… 1 给定两组序列 求上下匹配的最大值(POJ1692 Crossed Matchings) 题意:给出两行数,求上下匹配的最多组数是多少。 匹配规则: 1 匹配对的数字必须相同 2 每个匹配必须有且只能有一个匹配与之相交叉,且相交叉的两组匹配数字必须不同 3 一个数最多只能匹配一次 阅读全文
posted @ 2016-07-03 13:05 vwirtveurit 阅读(293) 评论(0) 推荐(0)
摘要:背包解组合数学问题,n种物品,每种num[i]个,求取r个的方法数。 背包思想,f[j]表示当前取j个数的方法数,则状态转移方程为 f[j] += f[k](max(j - num[i], 0) <= k < j) 外层循环枚举物品,内层循环从大到小枚举空间,最内层枚举方法数。 #include<i 阅读全文
posted @ 2016-06-28 22:17 vwirtveurit 阅读(640) 评论(0) 推荐(0)
摘要:本文持续更新 对计数,组合数学DP作总结,给出思路,状态转移方程,略去代码,状态初始值等。 1 划分数 (1)m个不可区分的物品分成n份,每份的数量大于等于0,求划分的方法数。 思路: 1)若m < n, 则等价于m个物品划分为m份。 2)否则,若至少存在1份数量为0,则相当于m个物品划分为n - 阅读全文
posted @ 2016-06-27 19:43 vwirtveurit 阅读(613) 评论(0) 推荐(0)
摘要:链接:http://acm.hdu.edu.cn/showproblem.php?pid=1502 思路:当只有两个数时,可以用卡特兰数做,当三个数时,没想到卡特兰数的做法。可以使用动态规划。 状态转移方程如下: dp[i][j][k] = dp[i - 1][j][k] + dp[i][j - 1 阅读全文
posted @ 2016-05-17 18:35 vwirtveurit 阅读(156) 评论(0) 推荐(0)
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1227 题意:一维坐标上有n个点,位置已知,选出k(k <= n)个点,使得所有n个点与选定的点中最近的点的距离总和最小,求出最小值。 思路: 将点i的距离记为为dis[i],从i到j选出一点使此段距离和 阅读全文
posted @ 2016-05-16 23:52 vwirtveurit 阅读(165) 评论(0) 推荐(0)