您的位置:首页 > 其它

2016秋季练习

2016-09-04 21:07 260 查看
来源:lightOJ 1025

区间DP,构造回文串,还是比较简单的,注意longlong

代码:#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 70;
char ch[MAXN];
long long dp[MAXN][MAXN];
int main(){
int T,nc = 1;
scanf("%d",&T);
getchar();
while(T--){
gets(ch);
int n = strlen(ch);
memset(dp,0,sizeof dp);
// for(int i=0;i<n;i++) dp[i][i] = 1;
for(int l=1;l<=n;l++){
// cout<<"len = "<<l<<endl;
for(int i=0;i+l-1<n;i++){
int j = i+l-1;
// cout<<i<<" "<<j<<" ";
dp[i][j] += dp[i+1][j];
dp[i][j] += dp[i][j-1];
if(ch[i] == ch[j]) dp[i][j] ++;
else dp[i][j] -= dp[i+1][j-1];
// cout<<dp[i][j]<<endl;
}
}
printf("Case %d: %lld\n",nc++,dp[0][n-1]);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: