时间限制:2000ms
单点时限:1000ms
内存限制:256MB

描述

给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个。内容相同位置不同的子序列算不同的子序列。

输入

第一行一个整数T,表示数据组数。之后是T组数据,每组数据为一行字符串。

输出

对于每组数据输出一行,格式为"Case #X: Y",X代表数据编号(从1开始),Y为答案。答案对100007取模。

数据范围

1 ≤ T ≤ 30

小数据

字符串长度 ≤ 25

大数据

字符串长度 ≤ 1000

样例输入

5
aba
abcbaddabcba
12111112351121
ccccccc
fdadfa

样例输出

Case #1: 5
Case #2: 277
Case #3: 1333
Case #4: 127
Case #5: 17

用dp[i][j]表示这一段里有多少个回文串,那首先dp[i][j]=dp[i+1][j]+dp[i][j-1],但是dp[i+1][j]和dp[i][j-1]可能有公共部分,所以要减去dp[i+1][j-1]。

如果str[i]==str[j]的话,还要加上dp[i+1][j-1]+1。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iomanip>
#include <algorithm>
#include <queue>
#define MOD 100007
using namespace std;
int dp[1005][1005];
char str[1005];
int main()
{int T,cnt=1;cin>>T;getchar();while(T--){gets(str);int n=strlen(str);int i,j;for(i=0;i<n;i++)dp[i][i]=1;for(i=1;i<n;i++){for(j=i-1;j>=0;j--){dp[j][i]=(dp[j+1][i]+dp[j][i-1]-dp[j+1][i-1]+MOD)%MOD;if(str[i]==str[j])dp[j][i]=(dp[j][i]+dp[j+1][i-1]+1+MOD)%MOD;}}printf("Case #%d: %d\n",cnt++,dp[0][n-1]);}return 0;
}

题目2 : 回文字符序列(区间DP)相关推荐

  1. 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]

    传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...

  2. [动规] hihocoder 1149 回文字符序列

    题目大意 原题链接,给定字符串求回文子序列数量.字符串长度 $len \leq 1000 $. 算法思路 题干比较简单,而且数据量不大,很容易想到使用递推,关键在于如何定义递推中间值和递推式.博主做题 ...

  3. CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】

    [编程题] 合并回文子串 时间限制:2秒 空间限制:262144K 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc"和"xyz&qu ...

  4. [HIHO1323]回文字符串(区间dp)

    题目链接:http://hihocoder.com/problemset/problem/1323 思路:区间dp,按照区间长度枚举所有区间和区间的起始位置.这时也可获取到区间的末位,比对这两个字符是 ...

  5. 2003基于栈的回文字符序列判断(C++)

    描述 回文序列是正反读均相同的字符序列,如"abba"和"abdba"均是回文,但是"good"不是回文.请设计一个算法判定给定的字符序列是 ...

  6. python找出字符串中的最长回文串子序列

    回文串,即: nums = 'aba' print(nums == nums[::-1]) # True 反转该序列后和之前元素相等 这里我们需要找出给定字符串里的最长回文串,即: nums = 'a ...

  7. 回文字符(第一周技术分享)

    第一篇博客就来写一下这次面试婷婷学姐问我的一个问题吧! 最开始我只会用最笨的办法把每位上的数字都写出来 再去比较首末是否相等去判断是否为回文数. #include <stdio.h> in ...

  8. 天池 在线编程 回文子串(区间动态规划)

    文章目录 1. 题目 2. 解题 1. 题目 描述 小明喜欢玩文字游戏,今天他希望在一个字符串的子串中找到回文串. 回文串是从左往右和从右往左读相同的字符串,例如121和tacocat.子串是一个字符 ...

  9. LeetCode 1216. 验证回文字符串 III(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给出一个字符串 s 和一个整数 k,请你帮忙判断这个字符串是不是一个「K 回文」. 所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为 ...

最新文章

  1. Python 之 matplotlib (十五)主次坐标轴
  2. 研究速递:老年人的心智能力不一定在衰减,抗干扰的能力会更强
  3. linux集群无密码访问,Linux服务器集群通过SSH无密码登录
  4. 030_自己实现一个HashSet
  5. UA MATH636 信息论8 线性纠错码的解码算法
  6. PRISM概率模型检测器初使用--骰子模型(改进版)
  7. 配置springboot在访问404时自定义返回结果以及统一异常处理
  8. 虚幻引擎 js开发游戏_通过编码3游戏学习虚幻引擎4-5小时免费游戏开发视频课程
  9. Mysql数据库查询当前操作的数据库名
  10. C#中用委托实现C++的回调函数
  11. python能做哪些客户端_发布一个Httpsqs的Python客户端
  12. 模块(module)
  13. linux启动mysql_Linux安装mysql
  14. MVVM框架从WPF移植到UWP遇到的问题和解决方法
  15. STSdb,最强纯C#开源NoSQL和虚拟文件系统
  16. 初二生态系统思维导图_初中生物生态系统知识点思维导图
  17. Apple Pay 接入
  18. Echarts示例大全 Demo合集网站
  19. Centos7.5 升级openssh到9.0p1
  20. 用pyinstaller打包python文件(.py)为可执行文件(.exe)

热门文章

  1. 团队管理中的每日站立会
  2. 解决Word 2007中更新整个目录后分节符消失问题
  3. linux枯燥命令行下的“有趣命令”
  4. android 拨打电话与发送短信
  5. 进程间通信(IPC)之内存映射mmap和共享内存shm
  6. 3、什么是控制反转(IoC),什么是依赖注入
  7. java 某点 旋转_java-如何围绕某个点旋转顶点?
  8. Java 实现 微信支付完成回调解密返回字符串内容
  9. SpringBoot 精通系列-使用Swagger2构建RESTful APIs
  10. css点滴知识汇集(转+编辑)