描述
阿福最近對回文串產生了非常濃厚的興趣。
如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,「abcaacba」是乙個回文串,「abcaaba」則不是乙個回文串。
阿福現在強迫症發作,看到什麼字串都想要把它變成回文的。阿福可以通過切割字串,使得切割完之後得到的子串都是回文的。
現在阿福想知道他最少切割多少次就可以達到目的。例如,對於字串「abaacca」,最少切割一次,就可以得到「aba」和「acca」這兩個回文子串。
輸入
輸入的第一行是乙個整數 t (t <= 20) ,表示一共有 t 組資料。
接下來的 t 行,每一行都包含了乙個長度不超過的 1000 的字串,且字串只包含了小寫字母。
輸出
對於每組資料,輸出一行。該行包含乙個整數,表示阿福最少切割的次數,使得切割完得到的子串都是回文的。
樣例輸入
3樣例輸出abaacca
abcd
abcba
1提示對於第一組樣例,阿福最少切割 1 次,將原串切割為「aba」和「acca」兩個回文子串。30
對於第二組樣例,阿福最少切割 3 次,將原串切割為「a」、「b」、「c」、「d」這四個回文子串。
對於第三組樣例,阿福不需要切割,原串本身就是乙個回文串。
劃分型dp
f[ i ] 表示前 i 個需要切割的次數
1 #include "view codebits/stdc++.h"2
3using
namespace
std ;
4const
int maxn = 1100;5
const
int inf = 2147483647;6
7int
judge [ maxn ][ maxn ] ;
8char
s[ maxn ] ;
9int
f[ maxn ] ;
1011 inline int gmin ( int x , int y )
1213 inline void init ( const
intn )
20for(int l=0 ; i-l>=1 && i+l+1
<=n ; ++l ) 24}
25}2627
intmain ( )
39for ( int j=1 ; jj ) 43}
44}45 printf ( "
%d\n
", f[ len ] ) ;46}
47return0;
48 }
2016-10-27 12:50:52
NOI題庫1 3答案
第一題 a b問題 include using namespace std int main 第七題 計算多項式的值 include include using namespace std int main 第八題?溫度表達轉化 include include using namespace std...
NOI題庫1 4答案
第一題 判斷數正負 includeusing namespace std int main 第三題 奇偶數判斷 includeusing namespace std int main 由於編譯器原因,加了pause,新版本可刪除第四題 奇偶ascii值判斷 include 萬能標頭檔案,這個標頭檔案...
NOI題庫 移動路線
總時間限制 1000ms 記憶體限制 65536kb 描述 桌子上有乙個m行n列的方格矩陣,將每個方格用座標表示,行座標從下到上依次遞增,列座標從左至右依次遞增,左下角方格的座標為 1,1 則右上角方格的座標為 m,n 小明是個調皮的孩子,一天他捉來乙隻螞蟻,不小心把螞蟻的右腳弄傷了,於是螞蟻只能向...