
双进程。
二三两
口禾火
展开
-
最长公共子序列LCS(dp-双进程)
双进程类dp即,有两个同时进行的决策,且两个决策互相影响。比如这道题,我们用一个二维数组f[i][j]表示s1取前i个字符,s2取前j个字符时的最长公共子序列。显然,可得状态转移方程:f[i][j]=max(f[i-1][j],f[i][j-1],f[i-1][j-1]); 特别地,s1[i]==s2[j]时,f[i][j]=max(f[i][j],f[i-1][j-1]+1)...原创 2018-03-11 18:41:24 · 225 阅读 · 0 评论 -
P428 交错匹配(dp-双进程)
思路来源:http://blog.sina.com.cn/s/blog_51cea4040100fgo4.html想到轮船问题了,那边是不允许相交,这里是必须且只能与一个匹配相交。 再仔细一想,两者什么关系都没有。f[i][j]表示up取前i个数,down取前j个数时的最大匹配数,注意,不是i和j匹配。 仍然先写状态转移方程: f[i][j]=max(f[i-1][j-1],f[...原创 2018-03-11 19:10:04 · 396 阅读 · 0 评论 -
配置魔药(dp-双进程)
根据求什么设什么原则,f[k][i][j]表示放第k种魔药、第一个坩埚时间为i、第二个坩埚时间为j时的最大药效。设第k种药的起始时间为a[k].st,结束时间为a[k].sw。那么可得状态转移方程: f[k][i][j]=max(f[k-1][a[k].st-1][j]); (i>=a[k].st) f[k][i][j]=max(f[k-1][i][a[k].st-1]);...原创 2018-03-13 20:38:58 · 494 阅读 · 0 评论 -
构建双塔(dp-双进程)
f[i][j] 表示取前i块水晶、两塔差为j时较高塔的最大高度。注意,这里的f[i][j]都是从上一阶段推得的。我们在面对第i块水晶时,它可能是从以下四种决策得来的:f[i][j]=max(f[i-1][j]) ; 这块水晶被丢掉了。f[i][j]=max(f[i-1][j+h[i]]) ; 这块水晶被给了上一个状态中较低的那座塔,且它未超过较高的塔,由图可知较高塔的最大高度是不变...原创 2018-03-13 21:06:47 · 495 阅读 · 0 评论