顧名思義:區間dp就是在區間上進行動態規劃,求解一段區間上的最優解。主要是通過合併小區間的 最優解進而得出整個大區間上最優解的dp演算法。
題目描述
給出乙個長度為n的字串,每次可以刪除乙個字母相同的子串,問最少需要刪多少次。 資料規模:n <= 500輸入格式
第1行:1個整數,表示字串的長度輸出格式第2行:n個字元的字串
第1行:1個整數,表示答案樣例
樣例輸入
5ab樣例輸出step 1:刪除 bacaa
baca
b 得到
aacstep 2 : 刪除 caaac
a
c 得到
aaastep 3 : 因為 aaaaaa
aaa 為相同的子串,既可以一次刪除。
空串空此題即為典型的區間dp題,根據題目可以設以 dp[串
l,r]
dp[l
,r] 是為 l
l 到 r
r 區間刪除完字串的最小次數,可分兩種情況討論:
不難得到狀態轉移方程:
#include
#include
#include
#include
using
namespace std;
int n, dp[
505]
[505];
char c[
505]
;int
main()
memset
(dp,
0x3f
,sizeof
(dp));
//初始化
for(
int i =
1; i <= n; i++
) dp[i]
[i]=0;
for(
int len =
2; len <= n; len++)}
}printf
("%d\n"
, dp[1]
[n]+1)
;return0;
}
區間dp的迴圈順序應該為
for
(階段)
for(狀態)
for(決策)
區間dp學習筆記
定義 區間動態規劃問題一般都是考慮,對於每段區間,他們的最優值都是由幾段更小區間的最優值得到,是分治思想的一種應用,將乙個區間問題不斷劃分為更小的區間直至乙個元素組成的區間,列舉他們的組合 求合併後的最優值。設f i,j 1 i j n 表示區間 i,j 內的數字相加的最小代價最小區間f i,i 0...
區間dp學習筆記
怎麼辦,膜你賽要掛慘了,下午我還在學區間 dp 不管怎麼樣,計畫不能打亂 4 不 4 為啥我一開始就先弄模板呢?因為這東西看模板就能看懂。for int i 2 i len i 列舉區間長度 for int l 1,r l len 1 r n l r 列舉左端點和右端點 以下你可以搞一下事情 for...
學習筆記 區間dp
f l r w i n g 表示區間 l,r 中能否壓縮成 w i n g code below include using namespace std const int maxn 200 10 int n,w,i,n,g,le maxn fir maxn sec maxn f maxn maxn...