構成最小回文數的分析

2021-09-30 16:17:39 字數 721 閱讀 5786

給定字串,可以通過插入字元,使其變成回文,求最少插入字元的數量。

比如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的時候,需...