![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线性dp
千夜刀火
这个作者很懒,什么都没留下…
展开
-
[动态规划学习]最短编辑距离
传送门 (有需要可以支持一下yxc大佬的课程) 题意:对A串进行增删改操作变成B串 思路(闫式dp nb!): 状态定义类似于LCS dp[i][j]表示a[1-i]匹配b[1-j]的操作数(属性:最小值) 对于增操作,对于ai后需要增加一个字母匹配bj,那么即需要增加的值肯定为bj,此时上一个状态就是dp[i][j-1],转移dp[i][j-1]+1。 对于删操作,需要删除ai才可匹配bj,所以上一个状态为dp[i-1][j]。转移dp[i-1][j]+1。 对于改操作,对于ai需要改变才能匹配bj,所以原创 2020-11-04 20:35:27 · 87 阅读 · 0 评论 -
[动态规划学习]低买
传送门 思路:题目很明显是lis的拓展,重要的是重复方案的处理。 核心代码即: for(int i=1;i<=n;i++) { if(dp[i]==1) t[i]=1; //对处于lis序列标记 for(int j=1;j<i;j++) if(a[i]>a[j]&&dp[i]==dp[j]+1) t[i]+=t[j]; //对于同一Lis序列,t数组递增。 else if(a[i]==a[j]&&dp[i]==dp[j])原创 2020-11-03 21:19:02 · 79 阅读 · 0 评论 -
[动态规划学习]花店橱窗
传送门 思路: 状态定义f[i][j] 对前i种花选择j花瓶的最大美学值。 对于题目要求的花种顺序,只需要对i种花顺序遍历即可。 得到转移方程 int pos=0; for(int k=0;k<j;k++) if(dp[i-1][k]>dp[i-1][pos]) pos=k; //从i-1种花的状态找到最大值,对当前状态进行更新。 dp[i][j]=dp[i-1][pos]+w[i][j]; 同时,用p[i][j]进行方案数的记录,即p[i][j]=pos;因为当前状态由pos位置状态原创 2020-11-03 21:12:17 · 123 阅读 · 0 评论 -
[动态规划学习]乌龟棋
传送门 思路:对每一步进行状态定义f[a][b][c][d],(a为1步,b为2步,c为3步,d为4步),则当前格子数为a+2b+3c+4*d。 #include <iostream> using namespace std; const int N=400; int n,m; int x[N],cnt[5]; int f[50][50][50][50]; int main() { cin>>n>>m; for(int i=0;i<n;i++) cin&g原创 2020-10-29 19:42:28 · 104 阅读 · 0 评论