题目链接

做的我很无奈,当时思路很乱,慌乱之中,起了一个想法,可以做,但是需要优化。尼玛,思路跑偏了,自己挖个坑,封榜之后,才从坑里出来,过的队那么多,开始的时候过的那么快,应该就不是用这种扯淡方法做的。

 表示很无奈,没有想到简单的递推式,搞了一个MLE+TLE的方法。
最初版本,多了一个for的复杂度,只要标记一下就好,可是在递归了不好处理,让我折腾了老一会,才弄好。
复制代码
int dfs(int l,int r)
{
int i,ans = ;
if(l == r)
return ;
else if(l > r)
return ;
if(dp[l][r])
return dp[l][r];
ans = dfs(l+,r)+;
for(i = l+; i <= r; i ++)
{
if(str[l] == str[i])
ans = (ans + dfs(l+,i-) + )%MOD;
}
dp[l][r] = ans;
return ans;
} 终于在3点多,改成了递推版本。然后MLE了。
复制代码
for(i = ; i < len; i ++)
{
dp[i][i] = ;
sum[i][i][str[i]-'a'] = ;
}
for(i = ; i < len; i ++)
{
for(j = ; j < len-i; j ++)
{
dp[j][i+j] = (dp[j+][i+j] + + sum[j+][i+j][str[j]-'a'])%MOD;
}
for(j = ; j < len; j ++)
{
if(j == ) continue;
k = str[j-]-'a';
if(i+j- == len) break;
if(str[i+j] == str[j-])
sum[j][i+j][k] = (sum[j][i+j-][k] + dp[j][i+j-] + )%MOD;
else
sum[j][i+j][k] = sum[j][i+j-][k];
}
}
printf("Case %d: %d\n",cas++,dp[][len-]); 终于又改了改,A了。改的,我都看不懂这是什么意思了。
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <string>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
#define MOD 10007
char str[];
int dp[][],sum[][][];
int sum1[][];
int sum2[][];
int main()
{
int len,t,cas = ,i,j,k;
scanf("%d",&t);
while(t --)
{
scanf("%s",str);
len = strlen(str);
for(i = ; i < len; i ++)
{
for(j = ; j < len; j ++)
dp[i][j] = ;
}
for(i = ; i < len; i ++)
{
for(j = ; j < ; j ++)
sum1[i][j] = sum2[i][j] = ;
}
for(i = ; i < len; i ++)
{
dp[i][i] = ;
sum1[i][str[i]-'a'] = ;
}
for(i = ; i < len; i ++)
{
if(i% == )
{
for(j = ; j < len-i; j ++)
{
dp[j][i+j] = (dp[j+][i+j] + + sum1[j+][str[j]-'a'])%MOD;
}
for(j = ; j < len; j ++)
{
if(j == ) continue;
k = str[j-]-'a';
if(i+j- == len) break;
if(str[i+j] == str[j-])
sum2[j][k] = (sum1[j][k] + dp[j][i+j-] + )%MOD;
else
sum2[j][k] = sum1[j][k];
}
}
else
{
for(j = ; j < len-i; j ++)
{
dp[j][i+j] = (dp[j+][i+j] + + sum2[j+][str[j]-'a'])%MOD;
}
for(j = ; j < len; j ++)
{
if(j == ) continue;
k = str[j-]-'a';
if(i+j- == len) break;
if(str[i+j] == str[j-])
sum1[j][k] = (sum2[j][k] + dp[j][i+j-] + )%MOD;
else
sum1[j][k] = sum2[j][k];
}
}
}
printf("Case %d: %d\n",cas++,dp[][len-]);
}
return ;
}

HDU 4632 Palindrome subsequence(DP)的更多相关文章

  1. HDU 4632 Palindrome subsequence (区间DP)

    Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65535 K (Java/ ...

  2. HDU 4632 Palindrome subsequence (2013多校4 1001 DP)

    Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65535 K (Java/ ...

  3. HDU 4632 Palindrome subsequence(区间dp)

    Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65535 K (Java/ ...

  4. HDU 4632 Palindrome subsequence(区间DP求回文子序列数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4632 题目大意:给你若干个字符串,回答每个字符串有多少个回文子序列(可以不连续的子串).解题思路: 设 ...

  5. HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)

    题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...

  6. HDU 4632 Palindrome subsequence (区间DP)

    题意 给定一个字符串,问有多少个回文子串(两个子串可以一样). 思路 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字符串中[i,j]位置中出现的回文子序 ...

  7. HDU 4632 Palindrome subsequence & FJUT3681 回文子序列种类数(回文子序列个数/回文子序列种数 容斥 + 区间DP)题解

    题意1:问你一个串有几个不连续子序列(相同字母不同位置视为两个) 题意2:问你一个串有几种不连续子序列(相同字母不同位置视为一个,空串视为一个子序列) 思路1:由容斥可知当两个边界字母相同时 dp[i ...

  8. hdu 4632 Palindrome subsequence

    http://acm.hdu.edu.cn/showproblem.php?pid=4632 简单DP 代码: #include<iostream> #include<cstdio& ...

  9. 【HDU】4632 Palindrome subsequence(回文子串的个数)

    思路:设dp[i][j] 为i到j内回文子串的个数.先枚举所有字符串区间.再依据容斥原理. 那么状态转移方程为   dp[i][j] = dp[i][j-1] + dp[i+1][j] - dp[i+ ...

随机推荐

  1. BZOJ 1455

    STL的基本用法 (居然能空间卡过去= =!!!) #include <cstdio> #include <ext/pb_ds/priority_queue.hpp> #inc ...

  2. CentOS 关闭蜂鸣器声音

    也许你会遇到像我这样的情况,每次使用Linux终端,当听到发出“嘀嘀”的声音时候,我都有种把我的机箱拆掉把那个内置的蜂鸣装置拽下来的冲动.按 Tab时候“嘀嘀”,按空格时候“嘀嘀”,每个在vi中错误的 ...

  3. JAVA程序1,1,2,3,5,8,13,21....第30个是什么...?

    解题思路:从第3个数字开始,后一个数字是前2个数字的和public class text{ public static void main(String[] args) { int num1=1,nu ...

  4. 【分布式存储】GlusterFS failing to mount at boot with Ubuntu 14.04

    GlusterFS failing to mount at boot with Ubuntu 14.04   Previously I asked about mounting GlusterFS a ...

  5. 升级Windows10后Apache服务器启动失败的解决方法

    升级windows10系统后,微软内置了ASP.NET的web高级服务,默认安装了IIS服务器和MSSQL数据库,因为80端口被占用的原因,导致Apache服务器无法正常启动,但是MySQL服务一切正 ...

  6. Java for LeetCode 202 Happy Number

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  7. DP:Miking Time(POJ 3616)

    2015-09-21 奶牛挤奶 题目大意就是这只Bessie的牛产奶很勤奋,某农民有一个时刻表,在N时间内分成M个时间段,每个时间段Bessie会一直产奶,然后有一定的效益,并且Bessie产奶后要休 ...

  8. July 19th, Week 30th Tuesday, 2016

    The good seaman is known in bad weather. 惊涛骇浪,方显英雄本色. You can't be afraid to fail. It's the only way ...

  9. C#的面向对象特性之封装

    在C#语言中,共有五种访问修饰符:public.private.protected.internal.protected internal. public 公有访问.不受任何限制.private 私有 ...

  10. CodeIgniter - 集成七牛云存储

    最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter2.1.3的PHP框架.刚拿到手完全无从下手的感觉,因为像框架这种东西,想从官方的PHPSDK集成进去,需要改动很 ...