给定一个由小写字母组成的字符串,输出有多少重复的回文子序列

#include<cstdio>
#include<cstring> using namespace std; #define N 2002 const int mod=1e9+; int n;
char s[N]; int f[N][N],g[N][N]; int pre[N][],nxt[N][]; int get_f(int l,int r)
{
if(l>r) return ;
int &ans=f[l][r];
if(ans!=-) return ans;
if(s[l]==s[r]) ans=get_f(l+,r)+get_f(l,r-);
else ans=get_f(l+,r)+get_f(l,r-)-get_f(l+,r-);
ans%=mod;
if(ans<) ans+=mod;
return ans;
} int get_g(int l,int r)
{
if(l==r) return ;
if(l>r) return ;
int &ans=g[l][r];
if(ans!=-) return ans;
if(s[l]!=s[r]) ans=get_g(l+,r)+get_g(l,r-)-get_g(l+,r-);
else
{
if(nxt[l][s[l]-'a']>=r && pre[r][s[r]-'a']<=l) ans=get_g(l+,r-)*+;
else if(nxt[l][s[l]-'a']==pre[r][s[r]-'a']) ans=get_g(l+,r-)*;
else ans=get_g(l+,r-)*-get_g(nxt[l][s[l]-'a']+,pre[r][s[r]-'a']-);
}
ans%=mod;
if(ans<) ans+=mod;
return ans;
} void cal()
{
for(int i=;i<=n;++i)
{
for(int j=i+;j<=n;++j)
if(!nxt[i][s[j]-'a']) nxt[i][s[j]-'a']=j;
for(int j=i-;j;--j)
if(!pre[i][s[j]-'a']) pre[i][s[j]-'a']=j;
}
} int main()
{
freopen("library.in","r",stdin);
freopen("library.out","w",stdout);
scanf("%s",s+);
n=strlen(s+);
memset(f,-,sizeof(f));
int all=get_f(,n);
cal();
memset(g,-,sizeof(g));
int dif=get_g(,n);
int ans=all-dif;
if(ans<) ans+=mod;
printf("%d",ans);
}

爆搜代码

#include<cstdio>
#include<cstring> using namespace std; int n;
char s[]; char tt[],t[];
int L; int ans,sum; int cnt[]; void find(int now,int len,int ok)
{
if(ok==len)
{
sum++;
return;
}
for(int i=now+;i<=n;++i)
if(t[ok+]==s[i]) find(i,len,ok+);
} void dfs(int len)
{
for(int i=;i<;++i)
{
tt[len]=char(i+'a');
L=;
for(int j=len;j;--j) t[++L]=tt[j];
for(int j=;j<=len;++j) t[++L]=tt[j];
sum=;
find(,L,);
if(sum>) ans+=sum-;
if(sum) dfs(len+);
}
} void dfs2(int len)
{
for(int i=;i<;++i)
{
tt[len]=char(i+'a');
L=;
for(int j=len;j;--j) t[++L]=tt[j];
for(int j=;j<=len;++j) t[++L]=tt[j];
sum=;
find(,L,);
if(sum>) ans+=sum-;
if(sum) dfs2(len+);
}
} int main()
{
freopen("library.in","r",stdin);
freopen("library.out","w",stdout);
scanf("%s",s+);
n=strlen(s+);
for(int i=;i<=n;++i) cnt[s[i]-'a']++;
dfs();
dfs2();
printf("%d",ans);
}

cdqz2017-test10-加帕里图书馆(区间DP & 简单容斥)的更多相关文章

  1. 2019.02.09 bzoj2560: 串珠子(状压dp+简单容斥)

    传送门 题意简述:nnn个点的带边权无向图,定义一个图的权值是所有边的积,问所有nnn个点都连通的子图的权值之和. 思路: fif_ifi​表示保证集合iii中所有点都连通其余点随意的方案数. gig ...

  2. 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)

    题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...

  3. [UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥

    题目链接: [集训队作业2018]小Z的礼物 题目要求的就是最后一个喜欢的物品的期望得到时间. 根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq ...

  4. $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥

    正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...

  5. bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)

    3622: 已经没有什么好害怕的了 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1033  Solved: 480[Submit][Status][ ...

  6. BZOJ4361 isn 树状数组、DP、容斥

    传送门 不考虑成为非降序列后停止的限制,那么答案显然是\(\sum\limits_{i=1}^N cnt_i \times (N-i)!\),其中\(cnt_i\)表示长度为\(i\)的非降序列数量 ...

  7. 洛谷P4859 已经没有什么好害怕的了 [DP,容斥]

    传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\ ...

  8. CodeForces - 285E: Positions in Permutations(DP+组合数+容斥)

    Permutation p is an ordered set of integers p1,  p2,  ...,  pn, consisting of n distinct positive in ...

  9. 【HDOJ5519】Kykneion asma(状压DP,容斥)

    题意:给定n和a[i](i=0..4),求所有n位5进制数中没有前导0且i出现的次数不超过a[i]的数的个数 2<=n<=15000,0<=a[i]<=3e4 思路:设f(n, ...

随机推荐

  1. PHP多进程编之pcntl_fork的实例详解

    PHP多进程编之pcntl_fork的实例详解 其实PHP是支持并发的,只是平时很少使用而已.平时使用最多的应该是使用PHP-FMP调度php进程了吧. 但是,PHP的使用并不局限于做Web,我们完全 ...

  2. Sqlserver 系统视图简单说明

    1. 查看系统视图的sql语句 select * from sys.system_views 2. 查看所有的 dynamic management 视图的sql select * from sys. ...

  3. Linux环境(CentOS)安装维护过程中用到的常见命令

    1. yum 安装时需要选择仓库 一般的路径 /etc/repos.d/ 2. 查看安装了哪些软件的 yum list |grep docker installed 的就是已经安装的软件. 3. 卸载 ...

  4. Bootstrap @Media分类

      手机的屏幕比较小,宽度通常在600像素以下:PC的屏幕宽度,一般都在1000像素以上(目前主流宽度是1366×768)设置相应的min-width和max-width值 所以响应式设计一般对600 ...

  5. 应用层协议及ip地址划分

    1.应用层协议 2.ip地址 3.子网划分及超网合并

  6. python学习笔记八——字典的方法

    4.3.3 字典的方法 字典的常用方法可以极大地提高编程效率.keys()和values()分别返回字典的key列表和value列表.例: dict={"a":"appl ...

  7. 【Mysql】—— MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...

  8. asp.net 性能提升

    原文链接:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance ASP.NET Web API 是非常 ...

  9. MT【17】利用柯西不等式求三角的最大值

    评:此题也可以设$1+cos\theta=t$,平方后变成$t$的单变量利用均值去做. 柯西平衡系数法其实就是待定系数法,利用等号取到的条件.

  10. bzoj2142: 礼物

    2142: 礼物 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会 ...