區間型動態規劃,都是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 如果只去...