POJ1080 Human Gene Functions 动态规划 LCS的变形
生活随笔
收集整理的這篇文章主要介紹了
POJ1080 Human Gene Functions 动态规划 LCS的变形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意讀了半年,唉,給你兩串字符,然后長度不同,你能夠用‘-’把它們補成同樣長度,補在哪里取決于得分,它會給你一個得分表,問你最大得分
跟LCS非常像的DP數組 dp[i][j]表示第一個字符串取第i個元素第二個字符串取第三個元素,然后再預處理一個得分表加上就可以
得分表:
score['A']['A'] = score['C']['C'] = score['G']['G'] = score['T']['T'] = 5;score['A']['C'] = score['C']['A'] = -1;score['A']['G'] = score['G']['A'] = -2;score['A']['T'] = score['T']['A'] = -1;score['A']['-'] = score['-']['A'] = -3;score['C']['G'] = score['G']['C'] = -3;score['C']['T'] = score['T']['C'] = -2;score['C']['-'] = score['-']['C'] = -4;score['G']['T'] = score['T']['G'] = -2;score['G']['-'] = score['-']['G'] = -2;score['T']['-'] = score['-']['T'] = -1;score['-']['-'] = -inf;那么DP方程就好推了:
dp[i][j] = :
dp[i-1][j] + score[s1[i-1]]['-']或者
dp[i][j-1] + score['-'][s2[j-1]]或者
dp[i-1][j-1] + score[s1[i-1]][s2[j-1]]或者
這三者之中取最大的
然后就是邊界問題我給忘記了
不夠細心,若單單是i==0或者j==0,邊界問題就出現了,邊界不可能為0的,所以還得處理一下邊界
轉載于:https://www.cnblogs.com/mengfanrong/p/4087212.html
總結
以上是生活随笔為你收集整理的POJ1080 Human Gene Functions 动态规划 LCS的变形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4招鉴别真假iPhone6!再也不怕被骗
- 下一篇: android listview 异步加