題目來自nyist第37題,如下: 描述
所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。
輸入第一行給出整數n(0每行輸出所需新增的最少字元數
dp解法,先找遞推式,要求ai,ai+1,ai+2....aj序列的解,有兩種情況,第一是ai == aj,則轉換為求ai+1,ai+2 ... aj-1序列的解;第二是ai != aj,此時可能的最小解是在左邊添上乙個aj-1,這樣便轉換為第一種情況,或者在右邊添上乙個ai+1,也轉換為第一種情況,而最終父問題的解就取自直接子問題以及第二種情況中兩個子問題中的最小解。
由此只要求父問題需要先求子問題,自下而上遞推;由於要求的子問題是1、2;2、3;3、4....n-1、n以及1、2、3;2、3、4;......n-2、n-1、n(數字代表字串的下標)等等,即需要乙個n*(n-1)/2大小的陣列來存放自下而上的計算結果。本題中採用二維陣列,其中dp[i][j]表示從第i個字元到第j個字元所組成的序列的解。
**如下:
#include #include #include int dp[1000][1000+2];
int main()
printf("%d\n",dp[0][len-1]);
}}
動規的題目**量不算很大,但是個人感覺還是較為難想,還需要積累聯絡。
回文字串(DP)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字...
回文字串(DP)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字...
uva10739 DP 回文字串
題目的意思就是給你乙個字串,問你最少經過幾次操作,能把它變成回文字串 操作有三種 在任意位置新增乙個字元 在任意位置刪除乙個字元 替換掉任意乙個字元 首先我們的 是指,將 到 之間的這個串變成回文最少要幾步 我們可以發現 如果第 個字元,和第 個字元,是相同的 難麼 也就是不管這兩個相同的,往裡面縮...