題目大意:
給乙個字串, 要求把它分割成若干個子串,使得每個子串都是回文串。問最少可以分割成多少個。
分析: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/else
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...