zoukankan      html  css  js  c++  java
  • hdu 5791 Two dp(多校)

    题意:
    给A序列和B序列,求A序列和B序列有多少个公共子序列(可以不连续)。例如{1,1,2} has 7 subsequences {1},{1},{2},{1,1},{1,2},{1,2},{1,1,2}.
    分析:
    f[i][j]表示A序列前i个和B序列前j个可以构成的公共子序列数
    f[i][j]=f[i][j-1]+f[i-1][j]-f[i-1][j-1]
    如果a[i]==b[j],那么f[i][j]+=f[i-1][j-1]+1

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int mod=1000000007;
    const int N=1009;
    ll f[N][N];
    int a[N],b[N];
    
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m)){
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            for(int i=1;i<=m;i++)scanf("%d",&b[i]);
            memset(f,0,sizeof(f));
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                   f[i][j]=(f[i-1][j]+f[i][j-1]-f[i-1][j-1]+mod)%mod;
                    if(a[i]==b[j]){
                        f[i][j]=(f[i-1][j-1]+1+f[i][j])%mod;
                    }
                }
            }
            printf("%d
    ",f[n][m]);
        }
        return 0;
    }
  • 相关阅读:
    Yantai
    Star War
    douban's woshang
    cannot change font's type in coreldraw
    LuXun said
    WaiTan
    free ubuntu disk前天就收到了寄来的光盘
    Winter Swimming
    before buy laptop买本本前,先来看看
    ubuntu beginer
  • 原文地址:https://www.cnblogs.com/01world/p/5762817.html
Copyright © 2011-2022 走看看