區間DP學習筆記

2022-06-04 03:12:08 字數 1429 閱讀 6255

顧名思義:區間dp就是在區間上進行動態規劃,求解一段區間上的最優解。主要是通過合併小區間的 最優解進而得出整個大區間上最優解的dp演算法。

題目描述

給出乙個長度為n的字串,每次可以刪除乙個字母相同的子串,問最少需要刪多少次。 資料規模:n <= 500

輸入格式
第1行:1個整數,表示字串的長度

第2行:n個字元的字串

輸出格式
第1行:1個整數,表示答案

樣例

樣例輸入

5ab

acaa

baca

樣例輸出
step 1:刪除 b

b 得到

aac

aaac

a

step 2 : 刪除 c

c 得到

aaa

aaa

step 3 : 因為 aaa

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...