uva11584 劃分回文串 簡單dp

2021-09-12 23:33:16 字數 637 閱讀 2509

題目大意:

給乙個字串, 要求把它分割成若干個子串,使得每個子串都是回文串。問最少可以分割成多少個。

分析:d[i] 表示狀態:長度為i的字串的最少劃分回文串

d[i]最大為i

1.第i個字元不能與之前的字元形成回文串,d[i]=d[i-1]+1

2.如果可以,j–i 是回文串 d[i]=d[j-1]+1

如果有多個j,選d[j-1]]最小的

狀態方程: d[i]=min

要注意可能整個字串剛好是回文串,設定d[0]=0 表示長度為0的有0個

#include #include #include #include #include #include #include#includeusing namespace std;

char str[1000];

int rec[1001][1001];

int d[1001];

int main()

//dp

d[1]=1;

for(int i=2;i<=strlen(str);i++)

//if(k==t-1) cout

cout

}

uva 11584 劃分回文串

線性dp問題 設d i 代表a 0 i 字元構成的串中劃分成回文串的最小個數 則有狀態轉移方程 d i min 可以這麼理解方程 d i 表示 0 i 範圍的最優方案,由最優子結構性質,d i 的表示也是由幾個最優項組成 d j 1.include using namespace std defin...

UVa11584 劃分回文串

判斷乙個字串能劃分成的最小回文串的個數 首先,分析問題,定義狀態 d i 為s 0 s i 的解,寫出狀態轉移方程 d i min d i 判斷條件?d j 1 inf 後面的判斷條件,就是s i s j 是否是回文串,為什麼?因為我們對於第i個字元,必然屬於從s j s i 的乙個回文串中,這是題...

UVa 11584 劃分回文串 簡單dp

題意 給乙個字串,要求把它分割成若干個子串,使得每個子串都是回文串。問最少可以分割成多少個。分析 d i 表示以i結尾的串最少可以分割的串數。d i min 這題還是很簡單的,不過值得學習的地方是預處理 i,j 是否為回文串那部分,給出了兩種預處理方法。include include include...