計蒜客 1409 回文字串(dp)

2021-10-23 03:24:52 字數 814 閱讀 1963

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。

輸入格式

第一行給出整數 nn(0接下來的 nn 行,每行乙個字串,每個字串長度不超過 10001000。

輸出格式

每行輸出所需新增的最少字元數。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入複製

1ab3bd

樣例輸出複製

2本題可以這樣想,如果這個字串裡面已經存在了回文串,那麼剩下左邊和右邊的那些就是不對稱的,所以在左邊補上右邊的字元,右邊補上左邊的字元,這樣就會完整了,所以要補齊的字元數目就是總長度減去串內部的回文串長度,而內部的回文串長度則可以由本串和逆串來求出最長回文子串行,這就是基本的dp問題了,好了,直接上**了。

//@author:hairu,wu

//@from:ahut

#include

#include

using

namespace std;

string fun

(string str)

return ans;

}int

main()

for(

int i=

1;i<=len;i++

)else}}

cout<[len]

<}return0;

}

計蒜客 12 回文數

乙個正整數,如果交換高低位以後和原數相等,那麼稱這個數為回文數。比如 121 12112 1,2332 2332 2332 都是回文數,13 1313 4567 4567 4567 不是回文數。任意乙個正整數,如果其不是回文數,將該數交換高低位以後和原數相加得到乙個新的數,如果新數不是回文數,重複這...

計蒜客 逃生dp

蒜頭君在玩一款逃生的遊戲。在乙個 n m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v 點血量,他的血量...

計蒜客 劃分整數(dp)

劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nn n 分解成不多於 kk k 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1 n ...