區間型動態規劃總結

2021-10-24 08:30:36 字數 2254 閱讀 8753

區間型動態規劃,都是dp[i][j]由小的區間先計算,然後計算大的區間得到,模板就是:

for(int len = 2; len <= n; len++)

int n = s.length();

int dp = new int[n][n];

int maxlen = 0;

for(int i = 0; i < n; i++)

char ss = s.tochararray();

for(int len = 2; len <= n; len++) else

maxlen = math.max(maxlen, dp[i][j]);}}

return maxlen;

}}longest palindromic substring

dp[i][j] 表示的物理意義是:string s裡面i到j之間的string是否是palindrome. 那麼很自然的會推導出遞推關係:

if s(i) != s(j) 直接 dp[i][j] = false;

if s(i) == s(j)  : 

if( j-i<=2) dp[i][j] = true;// aba, 這個是容易犯錯的點。 j-i = 2的情況一定要考慮進去;

else dp[i][j] = dp[i+1][j-1]  代表i,j指標向中間移動;

因為計算dp[i][j] 需要用到下一層的dp[i+1][j-1],所以for迴圈的時候,要從下開始算,也就是從後面開始計算;

class solution 

int n = s.length();

boolean dp = new boolean[n][n];

string maxstr = "";

int maxlen = 1;

for(int i = 0; i < n; i++)

char ss = s.tochararray();

for(int len = 2; len <= n; len++) else

if(j - i >= 2 && dp[i + 1][j - 1])

if(dp[i][j]) }}

}}

return maxstr;

}}

palindromic substrings 

思路:區間型動態規劃 dp[i][j] = true if s[i] == s[j] and ( j - i <= 2 || dp[i+1][j - 1])

區間型,從小到大,計算,初值len = 1, len >= 2; 

class solution 

int n = s.length();

boolean dp = new boolean[n][n];

int pcount = 0;

for(int i = 0; i < n; i++)

char ss = s.tochararray();

for(int len = 2; len <= n; len++) else

if(j - i >= 2 && dp[i + 1][j - 1]) }}

}return pcount;

}}

burst balloons 思路:f[i][j]代表:i個氣球和j個氣球不能被扎破的情況下,中間扎破能夠得到的最大值。

記住首尾先要加入乙個1,然後區間型動態規劃,一定是先計算小區間然後計算大區間,所以for迴圈用len來寫,然後列舉起點,最後得到整個區間的最大值;

class solution 

int n = nums.length;

int a = new int[n + 2];

// 最左邊和最右邊放值1;

a[0] = 1; a[a.length - 1] = 1;

n += 2;

for(int i = 1; i < n - 1; i++)

int dp = new int[n][n];

//最短的balloon之間是不能扎破的,所以為0;

for(int i = 0; i < n - 1; i++)

// [1] a[0]....a[n - 2] [1]

// 列舉length,區間型動態規劃,都是從length從小到大計算的;

for(int len = 2; len <= n; len++) }}

return dp[0][n - 1];

}}

區間型動態規劃

給定乙個序列 字串,進行一些操作 最後一步將序列 字串去頭 去尾 剩下的會是乙個區間 i,j 狀態自然定義為f i j 表示面對子串行 i j 時的最優性質 667.最長的回文序列 中文english 給一字串 s,找出在 s 中的最長回文子串行的長度.你可以假設 s 的最大長度為 1000.exa...

動態規劃 區間型

概述 最長的回文序列 取數是否必勝 給定乙個序列 字串,進行一些操作,最後一步會將序列 字串去頭 去尾 剩下的會是乙個區間 i,j 狀態自然定義為f i j 表示面對子串行 i,j 時的最優性質 1.題目描述 1.給定乙個字串s,長度是n,找到它最長的回文子串行的長度 例子 輸入 bbbab 輸出 ...

刪數 dp區間型動態規劃

有n個不同的正整數數x1,x2,xn 排成一排,我們可以從左邊或右邊去掉連續的i個數 只能從兩邊刪除數 1 i n,剩下n i個數,再把剩下的數按以上操作處理,直到所有的數都被刪除為止。每次操作都有乙個操作價值,比如現在要刪除從i位置到k位置上的所有的數。操作價值為 xi xk k i 1 如果只去...