码迷,mamicode.com
首页 > 其他好文 > 详细

P2679 子串

时间:2018-12-16 11:05:02      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:include   span   mmm   main   char   efi   name   滚动数组   class   

  这题真不错,需要三维dp,转移方程为我好久才想出来。

  然后发现数组开不下……

  emmm……

  于是乎我看了题解,才想起来我会滚动数组,,,qwq

  这道题的关键就是,对于这个第 i 位是和上一个合并还是单独新开一个串,那么对于上述两种情况,就要对应必须选第 i 个或者第 i 个可选可不选(即现有最优解)。

  代码如下:

#include<cstdio>
#include<iostream>
using namespace std;
#define mod 1000000007
int n,m,k,now,pre;
int ans[3][1005][1005],res[3][1005][1005];
char a[1005],b[1005];
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    scanf("%s%s",a+1,b+1);
    ans[0][0][0]=1,now=1,pre=0;
    for(int i=1;i<=n;i++)
    {
        ans[now][0][0]=1;
        for(int j=1;j<=m;j++)
        for(int p=1;p<=k;p++)
        {
            if(a[i]==b[j])
            res[now][j][p]=(res[pre][j-1][p]+ans[pre][j-1][p-1])%mod;
            else                        
            res[now][j][p]=0;            
            ans[now][j][p]=(res[now][j][p]+ans[pre][j][p])%mod;
        }
        pre=now;
        now^=1;
    }
    printf("%d",ans[now^1][m][k]);
    return 0;
}

  dp代码就是短小精悍啊~

  

P2679 子串

标签:include   span   mmm   main   char   efi   name   滚动数组   class   

原文地址:https://www.cnblogs.com/popo-black-cat/p/10125517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!