本题为典型的动态规划,关键找出序列比对的3个不同情况,即子问题
设d[i][j]为取s1第i个字符,s2第j个字符时的最大分值
则决定p为最优的情况有三种 p数组为分数矩阵
1、 s1取第i个字母,s2取“ - ”: d[i-1][j]+p[ s1[i-1] ]['-'];
2、 s1取“ - ”,s2取第j个字母:d[i][j-1]+p['-'][ s2[j-1] ];
3、 s1取第i个字母,s2取第j个字母:d[i-1][j-1]+p[ s1[i-1] ][ s2[j-1] ];
即dp[i][j]为上述三种情况的最大值
易犯错误
1、p数组的初始化,不细心的话容易犯错(因为这个低级错误WA两次- -)
2、d[0][j],d[i][0],d[0][0]边界值的赋值
Source Code
Problem: 1080 | User: yangliuACMer | |
Memory: 568K |