hihoCoser(#1149 : 回文字符序列)
2016-02-25 20:33
239 查看
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
小数据
字符串长度 ≤ 25
大数据
字符串长度 ≤ 1000
样例输入
样例输出
单点时限: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
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MOD=100007; char buf[1005]; int dp[1005][1005]; int main() { int T; scanf("%d",&T); int cas=1; while(T--) { memset(dp,0,sizeof(dp)); scanf("%s",buf); int len=strlen(buf); for(int j=0;j<len;j++) { dp[j][j]=1; for(int i=j-1;i>=0;i--) { dp[i][j]=(dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]+MOD)%MOD; if(buf[i]==buf[j]) dp[i][j]=(dp[i][j]+dp[i+1][j-1]+1)%MOD; } } printf("Case #%d: %d\n",cas++,dp[0][len-1]); } return 0; }
相关文章推荐
- LightOJ 1259 Goldbach`s Conjecture(数论)
- eclipse 常用插件
- 配置文件的写法
- Java 中带包的类的编译与执行
- PHP内核探索之变量(2)-理解引用
- 大型网站架构系列:负载均衡详解(3)
- Translucent System Bars-4.4新特性
- OpenCV实践之路——TrackBar调整图像的亮度和对比度(OpenCV1和OpenCV2两种版本)
- C语言运算优先级
- JVM结构、GC工作机制详解
- SetInterval()与setTimeout()的区别
- 井字棋C源码
- 大型网站架构系列:负载均衡详解(2)
- Chapter 4、流程控制(二)---循环语句 (25th,Feb)
- 第一个只出现一次的字符位置
- C++STL中的标准模板——优先队列
- cin cout里面的c是哪个单词的首字母?
- hdu 2844 Coins
- win下局域网内下载文件
- About me