IOI2000 洛谷1435 回文字串

2022-07-22 13:39:21 字數 795 閱讀 2946

回文詞是一種對稱的字串。任意給定乙個字串,通過插入若干字元,都可以變成回文詞。此題的任務是,求出將給定字串變成回文詞所需要插入的最少字元數。

比如 「ab3bd」插入2個字元後可以變成回文詞「dab3bad」或「adb3bda」,但是插入少於2個的字元無法變成回文詞。

注:此問題區分大小寫

第一行乙個整數n(3<=n<=5000)表示字串的長度

第二行乙個長度為n的字串

有且只有乙個整數,即最少插入字元數

5 ab3bd

2設讀入的字串為s,如果s[i]~s[j]是回文,那麼s[i+1]~s[j-1]一定也是回文,滿足區間動規的特點。

設f[i][j]表示s[i]~s[j]變成回文詞需要插入的最少字元數,當s[i]==s[j]時,f[i][j]=f[i+1][j-1]+1,否則f[i][j]=min(f[i+1][j],f[i][j-1])+1。

我用的是記憶化搜尋,當i>j時,由於是不合法的狀態,我最初返回無窮大,但由於i>j的狀態只可能從i==j &&s[i]==s[j]轉移過來,所以i>j這個狀態的值其實是i==j &&s[i]==s[j]這個狀態的值,應該返回0。

1 #include 2 #include 3

int n,f[5005][5005];4

bool vis[5005][5005];5

char s[5005];6

int min(int x,inty)7

10int dp(int i,int

j)11

21int

main()

22

IOI2000 回文字串

題目 回文字串 題目描述 任意給定乙個字串,通過插入若干字元,都可以變成回文詞。此題要求出 將給定字串變成回文詞所需要插入的最少字元數。比如 ab3bd 插入2個字元後可以變成回文詞 dab3bad 或 adb3bda 但是插入少於2個的字元無法變成回文詞。注 此問題區分大小寫 輸入格式 乙個字串 ...

洛谷P1015回文數

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個十進位制數56,將56加65 即把5656從右向左讀 得到121是乙個回文數。又如 對於十進位制數8787 step1 87 78 165 step2 165 561 726 step3 726 627 135...

洛谷 P1015 回文數

題目描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個十進位制數5656,將5656加6565 即把5656從右向左讀 得到121121是乙個回文數。又如 對於十進位制數8787 step1 8787 7878 165165 step2 165165 5...