UVA11584 劃分成回文串

2022-08-11 12:57:12 字數 725 閱讀 7005

紫書275

題意:輸入乙個字元,最少能劃分幾個回文串

分析:預處理一下,判斷i,j是否為回文串;動態分析求解,dp[i] = dp[i - 1] + 1,假設i單獨成為乙個回文串,然後在往前找,如果j到i是回文,dp[i] = min(dp[i], dp[j - 1] + 1)

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int max = 1000 + 10;7

const

int inf = 0x3f3f3f3f;8

char

s[max];

9int

dp[max],len,is_h[max][max];

10void

judge_huiwen()

1124 x =i;

25 y = i + 1;26

while(x > 0 && y <= len && s[x] ==s[y])

2732}33

}34intmain()

3554}55

}56 printf("

%d\n

",dp[len]);57}

58return0;

59 }

view code

Uva 11584,劃分成回文串

題意 乙個字串,將它劃分一下,使得每個串都是回文串,求最少的回文串個數。分析 d i 到第 i 個字元時的最優解 即最少劃分為幾個回文串 就有方程 d i min d j 1 其中s j 1,i 要是回文串 這樣一來,列舉就是o n 2 的複雜度,如果按照普通的判斷s j 1,i 是否是回文串,時間...

UVa11584 劃分成回文串

題目描述 給乙個字串,要求把它分割成若干個子串,使得每個子串都是回文串。問最少可以分割成多少個。字串長度不超過1000。例如 racecar 本身就是回文串,答案為1 fastcar 答案為7,分成的7個回文串為 f a s t c a r aaadbccb 答案為3,分成的3個回文串為 aaa d...

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