题目链接:http://codeforces.com/problemset/problem/245/H

题意:

  给你一个字符串s。

  然后有t个询问,每个询问给出x,y,问你区间[x,y]中的回文子串的个数。

题解:

  表示状态:

    dp[x][y] = numbers

    表示区间[x,y]中的回文子串个数。

  找出答案:

    每次询问:ans = dp[x][y]

  如何转移:

    dp[x][y] = dp[x][y-1] + dp[x+1][y] - dp[x+1][y-1] + pal[x][y]

    用到了容斥原理。

    pal[x][y]表示子串s[x to y]是否是一个回文串(是为1,不是为0)。

    其中pal[x][y]又有递推式:

    pal[x][y] = ( s[x]==s[y] && (x+1==y || pal[x+1][y-1]) )

    记忆化搜索就好啦。

  边界条件:

    if(x>y) dp[x][y] = 0

    if(x==y) dp[x][y] = 1

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 5005 using namespace std; int t;
int dp[MAX_N][MAX_N];
int pal[MAX_N][MAX_N];
char s[MAX_N]; int is_pal(int x,int y)
{
if(s[x]!=s[y]) return ;
if(x+==y) return ;
if(pal[x+][y-]!=-) return pal[x+][y-];
return pal[x+][y-]=is_pal(x+,y-);
} int dfs(int x,int y)
{
if(dp[x][y]!=-) return dp[x][y];
if(x>y) return ;
if(x==y) return dp[x][y]=pal[x][y]=;
dp[x][y]=dfs(x,y-)+dfs(x+,y)-dfs(x+,y-);
pal[x][y]=(s[x]==s[y] && (x+==y || pal[x+][y-]));
return dp[x][y]=dp[x][y]+pal[x][y];
} int main()
{
scanf("%s%d",s+,&t);
memset(dp,-,sizeof(dp));
int x,y;
while(t--)
{
scanf("%d%d",&x,&y);
printf("%d\n",dfs(x,y));
}
}

Codeforces 245H Queries for Number of Palindromes:区间dp的更多相关文章

  1. codeforces 245H . Queries for Number of Palindromes 区间dp

    题目链接 给一个字符串, q个询问, 每次询问求出[l, r]里有多少个回文串. 区间dp, dp[l][r]表示[l, r]内有多少个回文串. dp[l][r] = dp[l+1][r]+dp[l] ...

  2. dp --- Codeforces 245H :Queries for Number of Palindromes

    Queries for Number of Palindromes Problem's Link:   http://codeforces.com/problemset/problem/245/H M ...

  3. codeforces 245H Queries for Number of Palindromes RK Hash + dp

    H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabyt ...

  4. Codeforces 245H Queries for Number of Palindromes

    http://codeforces.com/contest/245/problem/H 题意:给定一个字符串,每次给个区间,求区间内有几个回文串(n<=5000) 思路:设定pd[i][j]代表 ...

  5. K - Queries for Number of Palindromes(区间dp+容斥)

    You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. There a ...

  6. Codeforces245H - Queries for Number of Palindromes(区间DP)

    题目大意 给定一个字符串s,q个查询,每次查询返回s[l-r]含有的回文子串个数(题目地址) 题解 和有一次多校的题目长得好相似,这个是回文子串个数,多校的是回文子序列个数 用dp[i][j]表示,s ...

  7. codeforces H. Queries for Number of Palindromes(区间dp)

    题目链接:http://codeforces.com/contest/245/problem/H 题意:给出一个字符串还有q个查询,输出每次查询区间内回文串的个数.例如aba->(aba,a,b ...

  8. [CF245H] Queries for Number of Palindromes (容斥原理dp计数)

    题目链接:http://codeforces.com/problemset/problem/245/H 题目大意:给你一个字符串s,对于每次查询,输入为一个数对(i,j),输出s[i..j]之间回文串 ...

  9. cf245H Queries for Number of Palindromes (manacher+dp)

    首先马拉车一遍(或者用hash),再做个前缀和处理出f[i][j]表示以j为右端点,左端点在[i,j]的回文串个数 然后设ans[i][j]是[i,j]之间的回文串个数,那就有ans[i][j]=an ...

随机推荐

  1. js中的DOM节点

    文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法. DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 把上面的代码拆分为Dom节 ...

  2. yaffs2在am335x上实施

    一.yaffs2文件烧写(通过网口) uboot下输入如下命令: setenv ipaddr 192.168.2.110;setenv serverip 192.168.2.222;saveenv n ...

  3. PHPstorm如何安装vue.js插件

    1.什么是PHPstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.----来自百度百科 一句话:P ...

  4. 一个手动备份MySQL数据库的脚本

    #!/bin/bash username=root hostname=localhost password=root mysql -u$username -h$hostname -p$password ...

  5. java操作文件流对象

    所有流对象 InputStream 字节流         FileInputStream 字节流 专门读写非文本文件的         BufferedInputStream 高效流 OutPutS ...

  6. easyUI参数传递Long型时,前台解析出错的问题——SKY

    果发现datagrid在显示Long类型数据时有问题.问题如下:比如一个数据ID为20121229101239002,经过转换之后的JSON数据也没有问题,但是在显示的时候就会显示为201212291 ...

  7. 智能家居DIY-空气质量检测篇-获取空气污染指数

    前言 话说楼主终于升级当爸了,宝宝现在5个月了,宝宝出生的时候是冬天,正是魔都空气污染严重的时候,当时就想搞个自动开启空气净化器,由于种种原因一直没有时间搞,最近终于闲下来了这个事情终于提上议程了,现 ...

  8. [note]树链剖分

    树链剖分https://www.luogu.org/problemnew/show/P3384 概念 树链剖分,是一种将树剖分成多条不相交的链的算法,并通过其他的数据结构来维护这些链上的信息. 最简单 ...

  9. linux c编程:管道

    2在前面介绍过,进程之间交换信息的唯一途径就是传送打开的文件.可以经由fork或者exec来传送.这一章将介绍新的进程共享方式 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都 ...

  10. eclipse js调试

    问题: js经常会被浏览器给cache,不管怎么刷都是原来的. 解决: 暂时有一个方法,一刷新就好,下面的截图: 1)先打开 <开发者工具> 2)找到Sources 3)Page中找到你的 ...