給定字串,可以通過插入字元,使其變成回文,求最少插入字元的數量。
比如poj 1159 這題
ab5db可以最少插入兩個字元 構成回文 abd5dba
abcd可以最少插入三個字元 構成回文 abcdcba
分析:用動態規劃。
設字元為str ,長度為n,下標的開始為l,結束為h
那麼如果str[l]==str[h] ,則只需要看str從l+1到h-1的回文如何構成
如果str[l]!=str[h],那麼要插入的字元要麼跟str[l]相同,要麼跟str[h]相同,假設:
跟str[l]相同,則只需判斷l+1到h的字元如何構成回文
跟str[h]相同,則只需判斷l到h-1的字元如何構成回文
由於是最少插入字元數,那麼取上述兩種情況中值最小的一種即可
遞推公式為
f[l][h]=(str[l]==str[h])?f[l+1][h-1]:(min(f[l+1][h],f[l][h-1])+1)
下面是我的源**,僅供參考:
#includeusing namespace std;
#define max 5005
char str[max];
short int fmi[max][max];
inline int min(int a,int b)
{ return a>n && n)
{ cin>>str;
cout<
問題 G 最小的回文數
問題 g 最小的回文數 時間限制 1 sec 記憶體限制 32 mb 提交 狀態 討論版 題目描述 回文數是從前往後和從後往前得到的數是相同的。現給你乙個正整數n,請你找到比n大的最小的那個回文數p。輸入輸入包含多組測試資料。每組輸入乙個正整數n,n不超過10000位,並且n不包含前導0。輸出對於每...
殺死敵人的最小回合數
時間限制 c c 1秒 空間限制 c c 32768k 拼多多8月30號的一到程式設計題 你在玩乙個回合制角色扮演的遊戲。現在你在準備乙個策略,一邊在最短的回合內擊敗敵方角色。在戰鬥開始時,敵人擁有hp格血量。當血量小於等於0時,敵人死去。乙個缺乏經驗的玩家可能簡單的嘗試每個回合都攻擊。但是你知道輔...
構成子網與構成超網的分析
眾所周知,單純按照ipv4位址結構與分類是不滿足我們現在大量個人電腦的使用需求的。為了應對這種問題,產生了構成子網與構成超網這麼兩個變種。構成子網是在原ip net id host id 上加入了subnet id 變成了net id subnet id host id 我們在分析這類ip的時候,需...