CodeM美團初賽A輪 合併回文子串 dp

2022-08-22 19:15:08 字數 1545 閱讀 8310

傳送門:

輸入例子:

2

aabb

aaaaabcaa

輸出例子:
4

5

題解:dp,i代表a串開始的位置,j代表b串開始的位置,da,db分別代表在a和b中的長度,dp[x][y][z][h]代表 a中選下標為x到y-1的串 和 b中選z到h-1的串是否可以組合成回文串。利用每個字串的長度更新dp[i][i + da][j][j + db]

初始狀態 da+db<=1時必為true

更新四種狀態 a或b中任意一組 首位和末位相同時 可以進行更新。存在四種情況 a[i] == a[i + da - 1] 或b[j] == b[j + db - 1]或a[i] == b[j + db - 1]或b[j] == a[i + da - 1]。

注意:不能用memset每次對dp處理 會tle。需要在每次更新時先設定值。

1

#define _crt_secure_no_deprecate

2#pragma comment(linker, "/stack:102400000,102400000")

3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include13 #include14 #include

15 #include16 #include17 #include18 #include

19 #include20

#define pii pair21

#define mod 1000000007

22#define mp make_pair

23#define pi acos(-1)

24#define eps 0.00001

25#define mst(a,i) memset(a,i,sizeof(a))

26#define all(n) n.begin(),n.end()

27#define lson(x) ((x<<1))

28#define rson(x) ((x<<1)|1)

29#define inf 0x3f3f3f3f

30 typedef long

long

ll;31 typedef unsigned long

long

ull;

32using

namespace

std;

33const

int maxn = 55;34

intdp[maxn][maxn][maxn][maxn];

3536

intmain()

3766

if (dp[i][i + da][j][j + db])ans = max(ans, da +db);67}

68 cout << ans <

70return0;

71 }

美團A輪 合併回文子串 dp

合併回文子串 時間限制 2秒 空間限制 262144k 輸入兩個字串a和b,合併成乙個串c,屬於a和b的字元在c中順序保持不變。如 abc 和 xyz 可以被組合成 axbycz 或 abxcyz 等。我們定義字串的價值為其最長回文子串的長度 回文串表示從正反兩邊看完全一致的字串,如 aba 和 x...

CodeM美團 初賽A輪 A題 身體訓練

美團外賣的配送員用變速跑的方式進行身體訓練。他們訓練的方式是 n個人排成一列跑步,前後兩人之間相隔 u 公尺,每個人正常速度均為 v 公尺 秒。當某個配送員排在最後的時候,他需要以當時自己的最高速度往前跑,直到超過排頭的人 u 公尺,然後降回到原始速度 v 公尺 秒。每個人最初的最高速度為c i 公...

2018美團CodeM程式設計大賽初賽B輪 A題開關燈

美團的辦公室一共有n層,每層有m個會議室,可以看成是乙個n m的網格圖。工程師們每天的工作需要協作的地方很多,經常要到會議室開會解決各種問題。公司是提倡勤儉節約的,因此每次會議室只在使用時才開燈。當乙個工程師進入會議室時,假設沒有其他人,他會把燈開啟。當乙個工程師離開會議室時,假設沒有其他人,他會把...