动态规划总结(更新中)

动态规划总结(更新中)

1.最长公共子串

  a  b  c  d
  0  0  0  0 

d 0 0 0 0 1

b 0 0 1 0 0

c 0 0 0 2 0

if(s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j] = 0;

2.最长公共子序列

a b c d

b 0 1 1 1

c 0 1 2 2

e 0 1 2 2

d 0 1 2 3

if(s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);

3.最小编辑代价

设替换,删除,增加一个字符的代价都为1
oppa->apple
讲解:讲解

4.最长递增子序列

65785689
6
6>5 5
5<7 57
7<8 578
8>=5 578
8>=6 568
8>=8 568
8<9 5689

if(s[i]>dp[index]) dp[++index] = s[i];
else 在序列中找第一个大于等于的数进行替换

5.不相邻最大子序列和

dp[n] = max(dp[n-1],dp[n-2]+a[n]);

posted @ 2022-09-18 17:13  voids5  阅读(17)  评论(0)    收藏  举报