题目2 : 回文字符序列(区间DP)
描述
给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串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)相关推荐
- 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...
- [动规] hihocoder 1149 回文字符序列
题目大意 原题链接,给定字符串求回文子序列数量.字符串长度 $len \leq 1000 $. 算法思路 题干比较简单,而且数据量不大,很容易想到使用递推,关键在于如何定义递推中间值和递推式.博主做题 ...
- CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】
[编程题] 合并回文子串 时间限制:2秒 空间限制:262144K 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc"和"xyz&qu ...
- [HIHO1323]回文字符串(区间dp)
题目链接:http://hihocoder.com/problemset/problem/1323 思路:区间dp,按照区间长度枚举所有区间和区间的起始位置.这时也可获取到区间的末位,比对这两个字符是 ...
- 2003基于栈的回文字符序列判断(C++)
描述 回文序列是正反读均相同的字符序列,如"abba"和"abdba"均是回文,但是"good"不是回文.请设计一个算法判定给定的字符序列是 ...
- python找出字符串中的最长回文串子序列
回文串,即: nums = 'aba' print(nums == nums[::-1]) # True 反转该序列后和之前元素相等 这里我们需要找出给定字符串里的最长回文串,即: nums = 'a ...
- 回文字符(第一周技术分享)
第一篇博客就来写一下这次面试婷婷学姐问我的一个问题吧! 最开始我只会用最笨的办法把每位上的数字都写出来 再去比较首末是否相等去判断是否为回文数. #include <stdio.h> in ...
- 天池 在线编程 回文子串(区间动态规划)
文章目录 1. 题目 2. 解题 1. 题目 描述 小明喜欢玩文字游戏,今天他希望在一个字符串的子串中找到回文串. 回文串是从左往右和从右往左读相同的字符串,例如121和tacocat.子串是一个字符 ...
- LeetCode 1216. 验证回文字符串 III(DP)
文章目录 1. 题目 2. 解题 1. 题目 给出一个字符串 s 和一个整数 k,请你帮忙判断这个字符串是不是一个「K 回文」. 所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为 ...
最新文章
- Python 之 matplotlib (十五)主次坐标轴
- 研究速递:老年人的心智能力不一定在衰减,抗干扰的能力会更强
- linux集群无密码访问,Linux服务器集群通过SSH无密码登录
- 030_自己实现一个HashSet
- UA MATH636 信息论8 线性纠错码的解码算法
- PRISM概率模型检测器初使用--骰子模型(改进版)
- 配置springboot在访问404时自定义返回结果以及统一异常处理
- 虚幻引擎 js开发游戏_通过编码3游戏学习虚幻引擎4-5小时免费游戏开发视频课程
- Mysql数据库查询当前操作的数据库名
- C#中用委托实现C++的回调函数
- python能做哪些客户端_发布一个Httpsqs的Python客户端
- 模块(module)
- linux启动mysql_Linux安装mysql
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
- STSdb,最强纯C#开源NoSQL和虚拟文件系统
- 初二生态系统思维导图_初中生物生态系统知识点思维导图
- Apple Pay 接入
- Echarts示例大全 Demo合集网站
- Centos7.5 升级openssh到9.0p1
- 用pyinstaller打包python文件(.py)为可执行文件(.exe)