noip2015 子串 dp
来源:互联网 发布:网络咨询大病种的方法 编辑:程序博客网 时间:2024/06/06 02:38
dp[i][j][k]表示A串匹配到第 i 位,B串匹配到第 j 位,分了k组的总方案数。后面再加0/1维表示第i位选或不选。
朴素DP会MLE,所以把第一维滚动起来。
dp[i][j][l][1] = dp[i-1][j-1][l-1][1] + dp[i-1][j-1][l-1][0] + dp[i-1][j-1][l][1];
dp[i][j][l][0] = dp[i-1][j][l][1] + dp[i-1][j][l][0];
时间复杂度:n×m×k。
#include<iostream>#include<cstdio>#define LL long longusing namespace std;char a[1005];char b[1005];int dp[2][205][205][2];int M=1e9+7;int main(){ int n,m,K; int ans=0; scanf("%d%d%d",&n,&m,&K); scanf("%s",a+1); scanf("%s",b+1); for(int i=1;i<=n;i++) { if(a[i]==b[1]) dp[i%2][1][1][1]=1; for(int j=1;j<=m;j++) for(int l=1;l<=K;l++) { dp[i%2][j][l][0]=dp[(i+1)%2][j][l][0]+dp[(i+1)%2][j][l][1]; dp[i%2][j][l][0]%=M; if(j==1&&l==1) { if(a[i]!=b[j]) dp[i%2][j][l][1]=0; } else { if(a[i]==b[j]) { dp[i%2][j][l][1]=dp[(i+1)%2][j-1][l-1][1]+dp[(i+1)%2][j-1][l-1][0]; dp[i%2][j][l][1]%=M; dp[i%2][j][l][1]+=dp[(i+1)%2][j-1][l][1]; dp[i%2][j][l][1]%=M; } else dp[i%2][j][l][1]=0; } if(j==m&&l==K) { ans+=dp[i%2][j][l][1]; ans%=M; } } } cout<<ans; return 0;}
1 0
- 【noip2015】【DP】子串
- NOIP2015 子串 DP
- noip2015 子串 dp
- NOIP2015 子串 dp
- [DP] NOIP2015 子串
- [noip2015]子串(dp)
- NOIP2015 子串【DP】【NOIP】
- 【uoj#149】【NOIP2015】子串 DP
- 【UOJ#149】【NOIP2015】子串【计数DP】
- NOIP2015 子串 解题报告(DP)
- [UOJ#149][NOIP2015]子串(dp)
- Noip2015 Day1 T2 子串(Dp)
- 洛谷 2676 [NOIP2015] 子串 DP
- UOJ149【NOIP2015】子串 (DP)
- 【DP】UOJ#149 【NOIP2015】子串
- [NOIP2015提高组]子串 DP
- code vs 4560 NOIP2015 D2T2 子串 (dp)
- 【codevs 4560】[NOIP2015 D2T2]子串(dp)
- 面向切面编程-原型
- struts2中定义拦截器对访问权限进行控制
- B-树关键字个数计算
- struts.xml 配置详解
- 勿以恶小而为之,勿以善小而不为
- noip2015 子串 dp
- G1垃圾回收器
- java基础-接口
- 中级软件设计师考试总结
- Linux查看程序端口占用情况
- SpringMVC_001_框架搭建
- 2016秋季 EDA 设计 课程内容
- Fiddler证书安装(查看HTTPS)
- RelativeLayout中 gone之后的布局错位问题