动态规划总结(更新中)
动态规划总结(更新中)
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]);
七月在野,八月在宇,九月在户,十月蟋蟀入我床下

浙公网安备 33010602011771号