uva10739 DP 回文字串

2021-06-27 09:44:44 字數 904 閱讀 4214

題目的意思就是給你乙個字串,問你最少經過幾次操作,能把它變成回文字串.

操作有三種

1.在任意位置新增乙個字元.

2.在任意位置刪除乙個字元;

3.替換掉任意乙個字元;

首先我們的d[i][j]是指,將i到j之間的這個串變成回文最少要幾步.

我們可以發現d[i][j]如果第i個字元,和第j個字元,是相同的.難麼d[i][j] = d[i + 1][j - 1]也就是不管這兩個相同的,往裡面縮一位.

但是如果第i位和第j位不相同,那麼我們就要比較了.

如果這兩位不相同,我們有兩種辦法,

1.把左邊那位刪了,或者把右邊那位刪了(因為通過加上兩位讓他們邊回文,開銷肯定大,所以我們直接不考慮加.)axxxb ->xxxb

2.把左邊那位變成右邊那位,或者把右邊那位,變成左邊那位 axxxb ->bxxxb;

上面兩種辦法開銷都是1次 ,我們我們比較  min (     d[i + 1][ j ]         ,   d[ i ] [ j - 1]  ,     d[  i + 1 ][ j - 1]  )   + 1;

最後如果 j - i < 1了,就返回0  ,因為只有1位了肯定是回文了呀,不需要操作...

ac**:

#include#includeconst int n = 1005;

const int inf = 0x3f3f3f3f;

char str[n];

int d[n][n];

int dp(int l , int r)

else if(str[l] == str[r])

else

d[l][r] = m;

return m;

}int main ()

}

回文字串(DP)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字...

回文字串(DP)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字...

DP入門 回文字串

題目來自nyist第37題,如下 描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。輸入第一行給出整數n 0每...