HDU 4632 Palindrome subsequence 解题报告
来源:互联网 发布:linux系统用户创建 编辑:程序博客网 时间:2024/06/07 05:39
题目
2013 暑假多校训练 4总结
题意:
一个字符串,有多少个subsequence是回文串。
题解:
用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。
//Time:906ms//Memory:7252KB#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>#include <vector>#define MAXN 1010#define MOD 10007using namespace std;char str[MAXN];int dp[MAXN][MAXN],len,tail;bool vi[MAXN][MAXN];int que[MAXN*MAXN];void push(int a,int b){ if(a<0||b>=len) return ; if(!vi[a][b]) vi[a][b]=1,que[tail++]=a*MAXN+b;}void cal(){ int head=0; tail=0; memset(dp,0,sizeof(dp)); memset(vi,0,sizeof(vi)); for(int i=0;i<len;++i) dp[i][i]=1,push(i-1,i),push(i,i+1); while(head<tail) { int i=que[head]/MAXN,j=que[head]%MAXN; ++head; dp[i][j]=dp[i+1][j]+dp[i][j-1]; if(i+1<=j-1) dp[i][j]-=dp[i+1][j-1]; if(str[i]==str[j]) { if(i+1<=j-1) dp[i][j]+=dp[i+1][j-1]; ++dp[i][j]; } dp[i][j]=(dp[i][j]+MOD)%MOD; push(i-1,j),push(i,j+1); }}int main(){ //freopen("/home/moor/Code/input","r",stdin); int ncase,cnt; scanf("%d",&ncase); for(int h=1;h<=ncase;++h) { scanf("%s",str); len=strlen(str); cal(); printf("Case %d: %d\n",h,dp[0][len-1]); } return 0;}
- HDU 4632 Palindrome subsequence 解题报告
- HDU Common Subsequence 解题报告
- HDU 4632 Palindrome subsequence
- hdu 4632 Palindrome subsequence
- hdu 4632 Palindrome subsequence
- HDU-4632-Palindrome subsequence
- hdu 4632 Palindrome subsequence
- hdu 4632Palindrome subsequence
- hdu 4632 Palindrome subsequence
- hdu-4632 Palindrome subsequence
- hdu 4632 Palindrome subsequence (dp)
- Hdu-4632 Palindrome subsequence DP
- HDU 4618 Palindrome Sub-Array 解题报告
- HDU 4731 Minimum palindrome 解题报告
- Wiggle Subsequence解题报告
- HDU 4632 Palindrome subsequence(区间dp)
- hdu 4632 Palindrome subsequence(DP)
- hdu - 4632 - Palindrome subsequence(dp)
- js parseInt
- C# Dictionary用法总结
- listview 和 listwiget 有什么区别联系
- 通过软件架构来达到易用性-软件策略
- 二分查找单调队列
- HDU 4632 Palindrome subsequence 解题报告
- c++设计模式—代理模式
- Lena与图像处理
- Effective Java 第13条 : 使类和成员的可访问性最小化
- scrapy 入门教程
- Java软件架构师必须具备的东西
- 定位API地址学习
- 再来一个复习一下,ELFhash算法和hash table
- cas原理介绍