[HIHO1149]回文字符序列(dp)

题目链接:http://hihocoder.com/problemset/problem/1149

题意:中文的。

dp(i,j)表示[i,j]区间内的回文串数量。

如果s[i]!=s[j],dp(i,j)=dp(i+1,j)+dp(i,j-1)-dp(i+1,j-1)

如果s[i]==s[j],dp(i,j)=dp(i+1,j)+dp(i,j-1)+1

注意取模

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 const int maxn = 1010;
 5 const int mod = 100007;
 6 int n;
 7 char s[maxn];
 8 int dp[maxn][maxn];
 9
10 int main() {
11   //freopen("in", "r", stdin);
12   int T, _ = 1;
13   scanf("%d", &T);
14   while(T--) {
15     scanf("%s", s); n = strlen(s);
16     memset(dp, 0, sizeof(dp));
17     for(int i = 0; i < n; i++) dp[i][i] = 1;
18     for(int i = 0; i < n; i++) {
19       for(int j = i-1; j >= 0; j--) {
20         if(s[i] != s[j]) dp[j][i] = dp[j+1][i] + (dp[j][i-1] - dp[j+1][i-1] + mod) % mod;
21         else dp[j][i] = dp[j+1][i] + dp[j][i-1] % mod + 1 % mod;
22       }
23     }
24     printf("Case #%d: %d\n", _++, dp[0][n-1] % mod);
25   }
26   return 0;
27 }
时间: 2024-10-12 10:40:37

[HIHO1149]回文字符序列(dp)的相关文章

编程之美资格赛 第二题 回文字符序列 dp

这是一道dp题,设置dp[i][j]代表的是从i到j之间的有多少个回文子串,dp[i][j] = dp[i][num[1]] +1+ dp[num[1]+1][j - 1]+1......+dp[num[j]][j-1] + 1 ,num[i] 代表的是与i字符相同的上一个字符的位置! 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", &quo

编程之美2015资格赛:回文字符序列

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

微软编程之美——回文字符序列

描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 限制 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为&q

hiho 编程之美2015资格赛(回文字符序列-回文子序列数)

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

编程之美——题目2 : 回文字符序列

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

题目2 : 回文字符序列(区间DP)

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为"

编程之美2015 #2 回文字符序列

题目: 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为&

回文字符序列

转载http://blog.csdn.net/u014800748/article/details/45148441 1.问题描述 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数

【hihoCoder】回文字符序列

描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为"Case #X: Y",X代表数据编号(从1开始),Y为答