IOI2000 回文字串

2022-03-17 18:03:19 字數 859 閱讀 3686

題目:回文字串

**:題目描述

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

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

注:此問題區分大小寫

輸入格式

乙個字串(0輸出格式

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

輸入輸出樣例

輸入

ab3bd
輸出
2
本題使用dp。

設dp[i, j]代表區間[i, j]變為回文字串所需要的最小運算元量。

分別向最左端及最右端插入乙個相等的字元,有dp[i, j] = min(dp[i + 1, j] + 1, dp[i, j - 1])。

由於左右兩個字元一樣,則有dp[i, j] = min。

初始化的時候,令dp[i][i] = dp[i + 1][i] = 0(其中0 < i < n)即可(因為單個字元本身就是回文字串;而出現了兩個相鄰且相同的字元a[i]和a[i + 1],轉移時代價為0)。

**如下:

#include#include#include#includeusing namespace std;

const int maxn = 1000 + 5;

char s[maxn];

int n, dp[maxn][maxn] = {};

int main()

} printf("%d\n", dp[1][n]);

return 0;

}

IOI2000 洛谷1435 回文字串

回文詞是一種對稱的字串。任意給定乙個字串,通過插入若干字元,都可以變成回文詞。此題的任務是,求出將給定字串變成回文詞所需要插入的最少字元數。比如 ab3bd 插入2個字元後可以變成回文詞 dab3bad 或 adb3bda 但是插入少於2個的字元無法變成回文詞。注 此問題區分大小寫 第一行乙個整數n...

快餐店(IOI2000郵局)

快餐店 題解 顯然這道題我們可以將n個加油站分為k段,那麼我們可以採用分段dp,用dp i j 表示將i個加油站分為j段的最小距離,即可得出轉移方程 dp i parts min dp i parts dp j parts 1 dis j 1 i 而這裡我們需要預處理計算出i到j這段區間的最小距離,...

1092 回文字串

1092 回文字串 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。每個字串都可以通過向中間新增一些字元,使之變為回文字串。例如 abbc 新增2個字元可以變為 acbbca,也可以新增3個變...