題目鏈結
題意是給兩個字串,問合併之後可以得到的最長回文串有多長.
如dba abcd 合併後可以成為 dabcbad 最長回文串即為它本身.
求一串字串的最長回文串的dp解法是dp[i][j]為1表示i到j為合法回文串,為0表示不合法,當(s[i] == s[j]&& dp[i+1][j-1]) dp[i][j] = 1, 空串的時候也是合法的.
兩個字串的做法在一串的基礎上加兩維狀態即可,即dp[i][j][k][l]表示a串的i到j且b串的k到l是否為合法回文串.注意把空串的情況處理一下
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define long long long
const long inf=0x3f3f3f3f;
const long mod=1e9+ 7;
const
double pi=acos(-1.0);
#define clri(x) memset(x,-1,sizeof(x))
#define clr0(x) memset(x,0,sizeof x)
#define clr1(x) memset(x,inf,sizeof x)
#define clr2(x) memset(x,-inf,sizeof x)
#define eps 1e-10
#define lson l , mid , rt<< 1
#define rson mid + 1 ,r , (rt<<1)+1
#define root 1, m , 1
int dp[53][53][53][53] ;
char a[60] , b[60] ;
int main()
if(a[i] == a[j] && dp[i+1][j-1][k][k-1])
dp[i][j][k][k-1] = 1;}}
for(int k =1 ; k <= alen + 1; ++ k)
for(int len1 = 0; len1 <= blen ; ++len1)
if(b[i] == b[j] && dp[k][k-1][i+1][j-1])
dp[k][k-1][i][j] = 1;}}
int ans = 0 ;
for(int len1 = 0; len1 <= alen ; ++ len1)}}
}printf("%d\n",ans) ;
}return
0 ;}
CodeM美團點評程式設計大賽A輪 C 倒水
程式設計題 倒水 時間限制 1秒 空間限制 32768k 有乙個大水缸,裡面水的溫度為t單位,體積為c公升。另有n杯水 假設每個杯子的容量是無限的 每杯水的溫度為t i 單位,體積為c i 公升。現在要把大水缸的水倒入n杯水中,使得n杯水的溫度相同,請問這可能嗎?並求出可行的最高溫度,保留4位小數。...
CodeM美團點評程式設計大賽A輪 C 倒水
倒水 時間限制 1秒 空間限制 32768k 有乙個大水缸,裡面水的溫度為t單位,體積為c公升。另有n杯水 假設每個杯子的容量是無限的 每杯水的溫度為t i 單位,體積為c i 公升。現在要把大水缸的水倒入n杯水中,使得n杯水的溫度相同,請問這可能嗎?並求出可行的最高溫度,保留4位小數。注意 一杯溫...
codeM 美團b輪 E 子串
時間限制 1秒 空間限制 32768k 給出乙個正整數n,我們把1.n在k進製下的表示連起來記為s n,k 例如s 16,16 123456789abcdef10,s 5,2 11011100101。現在對於給定的n和字串t,我們想知道是否存在乙個k 2 k 16 使得t是s n,k 的子串。輸入描...