cdqz2017-test10-加帕里图书馆(区间DP & 简单容斥)
给定一个由小写字母组成的字符串,输出有多少重复的回文子序列
#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 & 简单容斥)的更多相关文章
- 2019.02.09 bzoj2560: 串珠子(状压dp+简单容斥)
传送门 题意简述:nnn个点的带边权无向图,定义一个图的权值是所有边的积,问所有nnn个点都连通的子图的权值之和. 思路: fif_ifi表示保证集合iii中所有点都连通其余点随意的方案数. gig ...
- 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...
- [UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥
题目链接: [集训队作业2018]小Z的礼物 题目要求的就是最后一个喜欢的物品的期望得到时间. 根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq ...
- $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥
正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...
- bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1033 Solved: 480[Submit][Status][ ...
- BZOJ4361 isn 树状数组、DP、容斥
传送门 不考虑成为非降序列后停止的限制,那么答案显然是\(\sum\limits_{i=1}^N cnt_i \times (N-i)!\),其中\(cnt_i\)表示长度为\(i\)的非降序列数量 ...
- 洛谷P4859 已经没有什么好害怕的了 [DP,容斥]
传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\ ...
- CodeForces - 285E: Positions in Permutations(DP+组合数+容斥)
Permutation p is an ordered set of integers p1, p2, ..., pn, consisting of n distinct positive in ...
- 【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, ...
随机推荐
- [转帖]从1G到5G
一文看懂无线通信:从1G到5G 投递人 itwriter 发布于 2019-02-03 15:25 评论(2) 有280人阅读 [收藏] « » 文/老和山下的小学僧 最近太邪乎,先引用一个马克思政治 ...
- 用SoapUI 测试Web Service
如何测试写好的Webservice? 方法一:写代码来测试,但还是太麻烦,你得花时间去学习各语言的关于Webservice调用的相关API. 方法二:使用Webservice开发的必备工具- Soap ...
- BFC——块级格式化上下文
BFC(块级格式化上下文) 一.BFC是什么? 从样式上看,具有BFC的容器和普通的容器没有区别.从功能上看,具有BFC的容器可以看作是隔离了的容器,容器里面的元素不会影响到外面的元素,并且BFC具有 ...
- Django admin 一些有用的设置
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的 ...
- 在腾讯云&阿里云上部署JavaWeb项目(Tomcat+MySQL)
之前做项目都是在本地跑,最近遇到需要在在云服务器(阿里云或者腾讯云都可以,差不多)上部署Java Web项目的问题,一路上遇到了好多坑,在成功部署上去之后写一下部署的步骤与过程,一是帮助自己总结记忆, ...
- maven 引用另一个jar包 需要先打包在仓库里面 并在pom里面配置 才可以引用
maven 引用另一个jar包 需要先打包在仓库里面 并在pom里面配置 才可以引用
- Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
B. Vladik and Complicated Book time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- Python入门基础之循环
如果计算机不能循环,那么它比人还笨,实际上它也确实比人笨.你之所以觉得计算机好厉害,是因为它快,guangzhoushenbo.com计算机可以在1秒钟内重复做一件事情成千上万次. Python学习交 ...
- 自学Zabbix3.12.4-动作Action-Operation配置
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 3.12.4 自学Zabbix3.12.4-动作Action-Operation配置 1. 概述 ...
- 【BZOJ3309】DZY Loves Math(莫比乌斯反演)
[BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...