UVA 10617 区间DP
2014-12-09 00:11
453 查看
#include<stdio.h>
#include<string.h>
#define MAXN 65
long long b[MAXN][MAXN];
char s[MAXN];
int n;
void solve()
{
int len = strlen(s);
for(int i = 0; i < len; i ++)
b[i][i] = 1;
for(int i = 1; i < len; i ++)
for(int j = 0; i+j < len; j ++)
{
long long t;
if(s[j] != s[i+j])
{
if(i+j-1 < j+1) t = 0;
else t = b[j+1][i+j-1];
b[j][i+j] = b[j][i+j-1] + b[j+1][i+j] - t;
}
else
{
b[j][i+j] = b[j][i+j-1] + b[j+1][i+j] + 1;
}
}
printf("%lld\n",b[0][len-1]);
}
void input()
{
while(~scanf("%d",&n))
while(n --)
{
scanf("%s",s);
solve();
}
}
int main()
{
input();
return 0;
}
#include<string.h>
#define MAXN 65
long long b[MAXN][MAXN];
char s[MAXN];
int n;
void solve()
{
int len = strlen(s);
for(int i = 0; i < len; i ++)
b[i][i] = 1;
for(int i = 1; i < len; i ++)
for(int j = 0; i+j < len; j ++)
{
long long t;
if(s[j] != s[i+j])
{
if(i+j-1 < j+1) t = 0;
else t = b[j+1][i+j-1];
b[j][i+j] = b[j][i+j-1] + b[j+1][i+j] - t;
}
else
{
b[j][i+j] = b[j][i+j-1] + b[j+1][i+j] + 1;
}
}
printf("%lld\n",b[0][len-1]);
}
void input()
{
while(~scanf("%d",&n))
while(n --)
{
scanf("%s",s);
solve();
}
}
int main()
{
input();
return 0;
}
相关文章推荐
- Uva 10617 Again Palindrome(区间dp)
- UVa 10617 Again Palindrome(回文串区间DP)
- UVA 题目10617 - Again Palindrome(区间DP)
- UVa 10617 Again Palindrome(回文 区间dp)
- UVA 10617 Again Palindromes (区间dp)
- UVa 10617 Again Palindrome(经典回文串区间DP)
- uva 1169 Robotruck(简单区间dp)
- UVA 1632 Alibaba(区间dp)
- UVA 10891 Game of Sum 总和一定的博弈,区间dp
- Uva 1331 - Minimax Triangulation(最优三角剖分 区间DP)
- uva 1351 - String Compression(区间DP)
- UVA 10891 Game of Sum(区间DP)
- uva live 4394 String painter 区间dp
- UVA 1437 String painter(区间dp)
- uva 10304 - Optimal Binary Search Tree(区间dp)
- UVa 1632 阿里巴巴(区间DP)
- UVA 10891 - Game of Sum(区间dp)
- UVA 10453 Make Palindrome(区间dp-补全回文串+打印结果)
- UVA - 10891 Game of Sum 区间DP(博弈DP)
- UVa 11404 - Palindromic Subsequence(最大回文串,区间DP)