![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线性dp
author:vehicel
description :线性dp
chstor
努力学好英语的菜狗
展开
-
P2758 编辑距离
P2758 编辑距离题目分析:LCS(最长公共子序列)的变形状态表示: f[i][j]表示字符串A前i个字符变为B前j个字符的最少字符操作次数状态转移:f[i][j] =1. 删除:f(i-1,j) + 1把字符串A的第i个字符删除,操作次数+12. 插入:f(i,j - 1) + 1把字符串A末端添加字符串B的第j个字符,操作次数+13. 修改(替换):f(i-1,j-1) + 1把字符串A的第i个字符替换为字符串B的第j个字符,操作次数+14. 不变: f(i - 1,j -原创 2020-11-13 19:44:35 · 121 阅读 · 0 评论 -
P1048 采药
题目链接:P1048 采药01背包问题:状态表示:f[i][j]表示取前i个草药,时间为j的最大价值状态转移:时间不够用if(j < v[i]) f[i][j] = f[i - 1][j];else时间够用(不选或者选)f[i][j] = max(f[i - 1][j],f[i - 1][j - v[i]] + w[i];初始化:f[0][0] = 0;res = max(res,f[n][0~m])代码如下(未优化):时间、空间复杂度为O(NM)原创 2020-11-06 11:58:48 · 413 阅读 · 0 评论 -
hdu_1024 Max Sum Plus Plus
题目链接:hdu_1024 Max Sum Plus Plus题目分析:将一组数据分成m段连续的子序列和,求这最大的分法不考虑优化,分析题目:状态表示:f[i][j]表示第i组共j个数的和状态转移:f[i][j] = max(f[i][j],f[i][j] + a[i],f[i - 1][k] + a[i]); (1 <= k < i)分别表示:不选第i个数,选第i个数,在i-1组中第k个数中断开,然后添加第i组的第一个数为a[j]因为题目数据过大,空间、时间复杂度都不符合,原创 2020-11-05 21:26:43 · 96 阅读 · 0 评论 -
P1077 摆花
题目链接:P1077 摆花题目大意:共m盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列,求一共多少种不同的摆花方案题目分析:依次枚举每一个种类的花(标号的从小到大的顺序依次摆列)把所有方案进行累加记忆化搜索:当大于m盆,就剪枝,等于m盆,就记录一种方案依次枚举每一个种类的花#include<iostream>using namespace std;const int N = 110;const int mod = 1000007原创 2020-11-04 20:44:10 · 162 阅读 · 0 评论 -
滑雪
题目链接:滑雪题目大意:某个点滑向上下左右相邻四个点之一,当且仅当高度减小,进行转移,找到这样最长的路径长度代码如下:记忆化搜索:#include<iostream>using namespace std;const int N = 110;int n,m;int g[N][N];int st[N][N];//记录从此点除法的最长路径长度 int dx[4] = {0,1,0,-1};int dy[4] = {1,0,-1,0};int ans;int d原创 2020-11-04 18:12:09 · 106 阅读 · 0 评论 -
P1095 守望者的逃离
题目链接:P1095 守望者的逃离题目分析:守望者有两种方式去终点:跑步、闪现闪现更快尽量闪现,不能闪现就休息(消耗时间)贪心:1.决策一: 能闪现就闪现,不能闪现就休息2. 决策二:一直跑步3. 维度:以时间为维度4. 对比两种决策,消耗时间相同,谁跑的更远代码如下:#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int原创 2020-11-04 15:39:36 · 116 阅读 · 0 评论