openjudge 切割回文

2021-07-08 16:48:29 字數 1049 閱讀 3220

描述

阿福最近對回文串產生了非常濃厚的興趣。

如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,「abcaacba」是乙個回文串,「abcaaba」則不是乙個回文串。

阿福現在強迫症發作,看到什麼字串都想要把它變成回文的。阿福可以通過切割字串,使得切割完之後得到的子串都是回文的。

現在阿福想知道他最少切割多少次就可以達到目的。例如,對於字串「abaacca」,最少切割一次,就可以得到「aba」和「acca」這兩個回文子串。

輸入輸入的第一行是乙個整數 t (t <= 20) ,表示一共有 t 組資料。

接下來的 t 行,每一行都包含了乙個長度不超過的 1000 的字串,且字串只包含了小寫字母。

輸出對於每組資料,輸出一行。該行包含乙個整數,表示阿福最少切割的次數,使得切割完得到的子串都是回文的。

樣例輸入

3

abaacca

abcd

abcba

樣例輸出

1

30

提示對於第一組樣例,阿福最少切割 1 次,將原串切割為「aba」和「acca」兩個回文子串。

對於第二組樣例,阿福最少切割 3 次,將原串切割為「a」、「b」、「c」、「d」這四個回文子串。

對於第三組樣例,阿福不需要切割,原串本身就是乙個回文串。

其實一直不是很擅長字串動規的題目

其實這道題的思路很簡單。ok是判斷回文。相當於乙個劃分型dp,f[i]表示前i個的最優值。貌似普通的劃分性dp(二維陣列)不能用,會t。

其實用一維陣列和兩重迴圈可以解決。因為如果當前無法滿足的話以後一定也會列舉到。

注意是每一段都是回文。

【**】

#include#include#includeusing namespace std;

int t,f[1005],len;

char s[1005];

inline bool ok(int l,int r)

int main()

else for (int j=1;j

openjudge 切割回文

總時間限制 1000ms 記憶體限制 65536kb 描述 阿福最近對回文串產生了非常濃厚的興趣。如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,abcaacba 是乙個回文串,abcaaba 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的...

Openjudge切割回文 pku t1

描述 阿福最近對回文串產生了非常濃厚的興趣。如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,abcaacba 是乙個回文串,abcaaba 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的。阿福可以通過切割字串,使得切割完之後得到的子串都是回...

OpenJudge P8471 切割回文

總時間限制 1000ms 記憶體限制 65536kb 描述 阿福最近對回文串產生了非常濃厚的興趣。如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,abcaacba 是乙個回文串,abcaaba 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的...