【DP】UOJ#149 【NOIP2015】子串
2017-10-18 18:38
288 查看
题面在这里
其实就是DP
fi,j,k表示A串处理到i,B串到j,分了k个块
发现状态数已经很大了,想办法O(1)转移
那么就fi,j,k,0/1表示i是否在块里
然后就很好转移了
示例程序:
其实就是DP
fi,j,k表示A串处理到i,B串到j,分了k个块
发现状态数已经很大了,想办法O(1)转移
那么就fi,j,k,0/1表示i是否在块里
然后就很好转移了
示例程序:
#include<cstdio> #include<cstring> #define cl(x,y) memset(x,y,sizeof(x)) typedef long long ll; const int maxn=1005,maxm=205,tt=1000000007; int n,m,K,f[2][maxm][maxm][2]; char a[maxn],b[maxm]; int main(){ scanf("%d%d%d",&n,&m,&K); scanf("%s%s",a+1,b+1); f[0][0][0][0]=1; for (int i=1;i<=n;i++){ cl(f[i&1],0); f[i&1][0][0][0]=1; for (int j=1;j<=m;j++) for (int k=1;k<=K;k++){ f[i&1][j][k][0]=(f[i&1^1][j][k][0]+f[i&1^1][j][k][1])%tt; if (a[i]==b[j]) f[i&1][j][k][1]=((ll)f[i&1^1][j-1][k-1][0]+f[i&1^1][j-1][k-1][1]+f[i&1^1][j-1][k][1])%tt; } } printf("%d",(f[n&1][m][K][0]+f[n&1][m][K][1])%tt); return 0; }
相关文章推荐
- [UOJ#149][NOIP2015]子串(dp)
- 【UOJ#149】【NOIP2015】子串【计数DP】
- UOJ #149 [NOIP 2015] 子串
- UOJ149【NOIP2015】子串 (DP)
- 【uoj#149】【NOIP2015】子串 DP
- NOIP2015 子串 解题报告(DP)
- 洛谷 2676 [NOIP2015] 子串 DP
- code vs 4560 NOIP2015 D2T2 子串 (dp)
- [noip2015]子串(dp)
- NOIP2015 子串【DP】【NOIP】
- NOIP2015子串[序列DP]
- [DP] NOIP2015 子串
- NOIP 2015 子串 DP
- LuoguP2679[NOIP2015] 子串 解题报告【多维DP】
- NOIP2015 子串 (DP+优化)
- NOIP 2015 子串 (DP)
- UOJ149 【NOIP2015】子串
- 洛谷 oj 2679 【NOIP2015】子串(一堆智障错误)Mod 、O(c) etc.
- NOIP 2015 Day 2 substring 子串(字符串 dp)
- NOIP2015 子串 dp