博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CROC-MBTU 2012, Elimination Round (ACM-ICPC) H DP题目
阅读量:4604 次
发布时间:2019-06-09

本文共 1502 字,大约阅读时间需要 5 分钟。

题意:

给定一个字符串s (1 ≤ |s| ≤ 5000) 然后又q个询问(1 ≤ q ≤ 106)  每次询问包括两个数l,r 求l到r内回文串的个数。

思路:

自己对dp的感觉真是弱爆了,大牛们16分钟就能A出来的题目,自己想了好久还是没思路,最后看了别人的代码才AC的,弱爆了。

dp[i][j] = d[i][j -1] + dp[i + 1][j] - dp[i + 1][j - 1] - R[i][j]   这里R[i][j]表示子串s[i...j]是否是回文串,这里的处理太棒了,自己没能想到。还有就是转移方程也没想到真是弱爆了。还是要继续加油啊。。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define CL(a,num) memset((a),(num),sizeof(a))#define iabs(x) ((x) > 0 ? (x) : -(x))#define Min(a,b) (a) > (b)? (b):(a)#define Max(a,b) (a) > (b)? (a):(b)#define ll long long#define inf 0x7f7f7f7f#define MOD 1073741824#define lc l,m,rt<<1#define rc m + 1,r,rt<<1|1#define pi acos(-1.0)#define test puts("<------------------->")#define maxn 100007#define M 107#define N 5007using namespace std;//freopen("din.txt","r",stdin);int dp[N][N],R[N][N];char s[N];int n;int main(){ //freopen("din.txt","r",stdin); int q,l,r; int i,j; scanf("%s",s + 1); n = strlen(s + 1); CL(dp,0); CL(R,0); for (i = 1; i <= n; ++i) R[i][i] = R[i + 1][i] = dp[i][i] = 1; for (i = 2; i <= n; ++i)//从长度小的开始处理 { for (j = 1; j <= n; ++j) { int k = j + i - 1; R[j][k] = R[j + 1][k - 1]&&(s[j] == s[k]); dp[j][k] = dp[j + 1][k] + dp[j][k - 1] - dp[j + 1][k - 1] + R[j][k]; } } scanf("%d",&q); while (q--) { scanf("%d%d",&l,&r); printf("%d\n",dp[l][r]); } return 0;}

  

 

 

转载于:https://www.cnblogs.com/E-star/archive/2012/11/21/2781477.html

你可能感兴趣的文章
13、对象与类
查看>>
Sublime Text3 个人使用心得
查看>>
jquery 编程的最佳实践
查看>>
MeetMe
查看>>
IP报文格式及各字段意义
查看>>
(转载)rabbitmq与springboot的安装与集成
查看>>
C2. Power Transmission (Hard Edition)(线段相交)
查看>>
STM32F0使用LL库实现SHT70通讯
查看>>
Atitit. Xss 漏洞的原理and应用xss木马
查看>>
MySQL源码 数据结构array
查看>>
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>