傳送門:
輸入例子:
2輸出例子:aabb
aaaaabcaa
4題解: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]5
初始狀態 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的網格圖。工程師們每天的工作需要協作的地方很多,經常要到會議室開會解決各種問題。公司是提倡勤儉節約的,因此每次會議室只在使用時才開燈。當乙個工程師進入會議室時,假設沒有其他人,他會把燈開啟。當乙個工程師離開會議室時,假設沒有其他人,他會把...