合併回文子串

2021-10-08 03:35:52 字數 987 閱讀 9692

學習周記

時間限制:c/c++ 2秒,其他語言4秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

題目描述

輸入兩個字串a和b,合併成乙個串c,屬於a和b的字元在c中順序保持不變。如"abc"和"xyz"可以被組合成"axbycz"或"abxcyz"等。

我們定義字串的價值為其最長回文子串的長度(回文串表示從正反兩邊看完全一致的字串,如"aba"和"xyyx")。

需要求出所有可能的c中價值最大的字串,輸出這個最大價值即可

輸入描述:

第一行乙個整數t(t ≤ 50)。

接下來2t行,每兩行兩個字串分別代表a,b(|a|,|b| ≤ 50),a,b的字符集為全體小寫字母。

輸出描述:

對於每組資料輸出一行乙個整數表示價值最大的c的價值。

示例1輸入複製2

aabb

aaaaabcaa

輸出複製45

資料非常的小,所以解法也很暴力,就是乙個四維的區間dp,分別代表兩個字串的區間

#include

#include

char a[55]

,b[55];

bool dp[55]

[55][

55][55

];intmax

(int a,

int b)

intmain()

else

if(b[k]

==b[l]

&&l)

if(a[i]

==b[l]

&&l)

if(b[k]

==a[j]

&&j)}if

(dp[i]

[j][k]

[l])}}

}}printf

("%d\n"

,ans);}

}

合併回文子串

輸入兩個字串a和b,合併成乙個串c,屬於a和b的字元在c中順序保持不變。如 abc 和 xyz 可以被組合成 axbycz 或 abxcyz 等。我們定義字串的價值為其最長回文子串的長度 回文串表示從正反兩邊看完全一致的字串,如 aba 和 xyyx 需要求出所有可能的c中價值最大的字串,輸出這個最...

合併回文子串 區間dp

題目描述 輸入兩個字串a和b,合併成乙個串c,屬於a和b的字元在c中順序保持不變。如 abc 和 xyz 可以被組合成 axbycz 或 abxcyz 等。我們定義字串的價值為其最長回文子串的長度 回文串表示從正反兩邊看完全一致的字串,如 aba 和 xyyx 需要求出所有可能的c中價值最大的字串,...

區間dp 合併回文子串

dp i j k p 表示a串的 i,j 和b串的 k,p 能否通過交叉且保持原有順序不變形成回文串。4維dp,先列舉長度,再列舉位置,狀態合法則貢獻答案。include using namespace std typedef long long ll 三年競賽一場空,不開long long見祖宗 ...