hdu 4362(dp求非连续回文串的个数)
来源:互联网 发布:哈尔滨数据开放平台 编辑:程序博客网 时间:2024/05/22 04:43
点击打开链接
题意:
给你一个字符串,求非连续回文串的个数,相同的字母在不同的位置的子串不同。。
dp[i][j]表示i到j的回文串的个数
dp[i][j]=dp[i+1][j]+dp[i][j-1],
因为会有重复的,所以
dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1];
有因为s[i]跟s[j]可能相同,所以
当s[i]==s[j]时,dp[i][j]=dp[i+1][j]+dp[i][j-1]+1;
当s[i]!=s[j]时,dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1];
#include"stdio.h"#include"string.h"#define N 1005#define M 10007int dp[N][N];int main(){int T,t;int i,j;int len;char s[N];t=1;scanf("%d",&T);getchar();while(T--){gets(s);len=strlen(s);memset(dp,0,sizeof(dp));for(i=0;s[i];i++)dp[i][i]=1;for(i=1;i<len;i++){for(j=i-1;j>=0;j--){dp[j][i]=dp[j][i-1]+dp[j+1][i]-dp[j+1][i-1]+M;if(s[i]==s[j])dp[j][i]=dp[j][i]+dp[j+1][i-1]+1+M;dp[j][i]%=M;}}printf("Case %d: %d\n",t++,dp[0][len-1]);}return 0;}
- hdu 4362(dp求非连续回文串的个数)
- hdu 1544(求回文子串的个数)
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
- 求1的个数(非dp)
- hdu 1544 连续回文子串的个数 构造法
- hdu 3948 求不同回文串的个数
- HDU 4745-Two Rabbits(最长非连续回文串,区间DP)
- HDU 4745 (区间dp ,最长非连续回文子序列)
- 求一个字符串的最长连续回文串(模板)
- Two Rabbits - HDU 4745 变形最长非连续回文串
- HDU 4745 Two Rabbits(非连续最长回文子序列,区间DP)
- HDU 4745 Two Rabbits【非连续最长回文子序列,区间DP】
- HDU 4745 Two Rabbits【非连续最长回文子序列,区间DP】
- 求回文子序列个数(DP)
- HDU 5869 求区间中不同连续序列的gcd的个数(树状数组)
- HDU 4632 Palindrome subsequence(区间DP 回文子串的个数)
- HDU 1544 Palindromes 回文串的个数
- hdu 1544 回文子串的个数
- [New Portal]Windows Azure Virtual Machine (18) Azure Virtual Machine内部IP和外部IP
- hdu 4602 Partition (递推+二分快速幂)
- iOS: NSDictionary的方法initWithContentsOfFile:
- HDOJ 1198 Farm Irrigation 并查集
- Gohead学习笔记
- hdu 4362(dp求非连续回文串的个数)
- iOS: NSDictionary的方法initWithDictionary:
- 8月1日
- 绘制线程 PaintThread
- 七种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速)
- Android Graphics.Camera类学习
- 2013 多校第四场 hdu 4635 Strongly connected
- UVA 10361 (13.08.01)
- 学习笔记_Active Directory_2013-08