動態規劃 以最小插入次數構造回文串

2021-10-22 18:39:12 字數 909 閱讀 8321

以最小插入次數構造回文串

比如輸入「s = abcea」 ,演算法返回2,因為可以給s插入2個字元變成回文串「abeceba」 或者「aebcbea」 。如果輸入s = 「aba」,則演算法返回0,因為s已經是回文串,不用插入任何字元。

base case:當i == j時,dp[i][j] = 0;因為當i == j 時 s[i...j]就是乙個字元,本身就是回文串,所以不需要進行任何插入操作。

s[i] != s[j]時,插入兩次肯定可以讓s[i...j]變成回文串,但是不一定是插入次數最少的。

則:做選擇,先將s[i...j-1]或者s[i+1...j]變成回文串

根據1的選擇,將s[i...j]變成回文

//狀態轉移方程:

if(s[i]

== s[j]

)else

int

mininsertions

(string s)

else}}

//根據dp陣列的定義,題目要求的答案是dp[0][n - 1]

return dp[0]

[n -1]

;}

dp陣列的狀態之和和它相鄰的狀態相關,所以dp陣列是可以壓縮成一維的

/**

* 把二維壓縮成一維

*/intmininsertions_1

(string s)

else

pre = temp;}}

return dp[n -1]

;}

動態規劃 藍橋杯測試次數

題目描述 x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的...

最小編輯代價(動態規劃)

在nowcoder上的題目,原題如下 對於兩個字串a和b,我們需要進行插入 刪除和修改操作將a串變為b串,定義c0,c1,c2分別為三種操作的代價,請設計乙個高效演算法,求出將a串變為b串所需要的最少代價。給定兩個字串a和b,及它們的長度和三種操作代價,請返回將a串變為b串所需要的最小代價。保證兩串...

最小編輯代價(動態規劃)

實現 對於不同的要求,主要是找到求dp i j 的規律。include include include include include include include using namespace std define max length 50 字串的最大長度 求出dp i j 代表從str1 ...