题意:找特定范围内的回文数量
做法:基本的区间DP做法,可惜忘了...
#include <iostream>
#include<cstdio>
#include<cstring>
#define LMT 5002
using namespace std;
bool is[LMT][LMT];
int get[LMT][LMT];
char str[LMT];
int main()
{
int n,l,r,ll;
scanf("%s",str);
ll=strlen(str);
for(int i=0;i<ll;i++)is[i+1][i]=is[i][i]=get[i][i]=1;//注意考虑没有对称轴字母的情况
for(int k=2;k<=ll;k++)
for(int j,i=0;i+k-1<ll;i++)
{
j=i+k-1;
is[i][j]=(str[i]==str[j]&&is[i+1][j-1]);
get[i][j]=get[i][j-1]+get[i+1][j]-get[i+1][j-1]+is[i][j];
}
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&l,&r);
l--;r--;
printf("%d\n",get[l][r]);
}
return 0;
}