NOIP2015D2T2サブストリング動的プログラミング

トピック
このトピックは目に留まります
dp [i] [j] [k] dp [i] [j] [k]d p [ i ] [ j ] [ k ]は計画の数を意味し
ますしかし、慎重に考えてください、dp dpd pタイプは、現在の文字と前の文字列の関係を反映していません(dp dpd p式:n 1つの次元を追加したことで私を責めますか?)
したがって、別の次元を追加する必要があります0/1 0/10 / 1現在の文字がストリングに接続されていることを示しています/ //現在の文字は新しいサブストリングの始まりです
0/10/10 / 1二つの配列より直感的な少し離れた:
我々は、ANS [I] [J] [a n s [ i ] [ j ] [ k ]AAを意味しますA字符串第 i i iキャラクターBBBストリングjjj文字のサブストリング現在の数はkkですkに対する回答の数
sum [i] [j] [k] sum [i] [j] [k]s u m [ i ] [ j ] [ k ]は、現在AAにあることを意味しますA字符串第 i i iキャラクターBBBストリングjjj文字のサブストリング現在の数はkkですで、プランの数kは
その後、関係式は、それを行う方法?
まず現在を考えるANS ANSN 、Sまたは使用A [i]とA [i]がA [ I ]か、
そう[I] [J] [L] = ANS ANS [I - 1] [J] [L] +和[I] [J] [L] ANS [I] [J] [L ] = ans [i-1] [j] [l] + sum [i] [j] [l]a n s [ i ] [ j ] [ l ]=a n s [ i1 ] [ j ] [ l ]+s u m [ i ] [ j ] [ l ]は
A [i]≠B [i] A [i] \ neq B [i]の場合に明らかですA [ i ]=B [ I ]和の合計S U Mがある00
经过思考可知当 A [ i ] = B [ i ] A[i]=B[i] A [ i ]=B [ i ]このとき、前のサブストリングに接続するか、新しいサブストリングを作成する
ので、sum [i] [j] [l] = sum [i − 1] [j − 1] [l] + ans [ i − 1] [j − 1] [l − 1] sum [i] [j] [l] = sum [i-1] [j-1] [l] + ans [i-1] [j-1 ] [l-1]s u m [ i ] [ j ] [ l ]=s u m [ i1 ] [ j1 ] [ l ]+a n s [ i1 ] [ j1 ] [ l1 ]
ははは終わった?美しくなりたいdp [1000] [200] [200] [2] ??Dp
[1000] [200] [200] [2] ??D P- 1 0 0 0 ] [ 2 0 0 ] [ 2 0 0 ] [ 2 ] 我々は最適化の空間にしているので、明らかに揚げ
オフ卵ロールとその直接何ものような一次元に見えることに注意
の空間計算量O( 4 mk)O(4mk)O 4 m k 時間の複雑さO(nmk)O(nmk)O n m k 大きな問題
ありません、コード

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n,m,k,now,ans[2][202][202],sum[2][202][202];
char a[1010],b[202];
int main(){
    
    
    cin>>n>>m>>k;
    scanf("%s%s",a+1,b+1);
    ans[0][0][0]=ans[1][0][0]=now=1;
    for(int i=1;i<=n;i++){
    
    
        for(int j=1;j<=m;j++){
    
    
            for(int l=1;l<=k;l++){
    
    
                if(a[i]==b[j])sum[now][j][l]=(sum[now^1][j-1][l]+ans[now^1][j-1][l-1])%mod;
                else sum[now][j][l]=0;
                ans[now][j][l]=(ans[now^1][j][l]+sum[now][j][l])%mod;
            }
        }
        now^=1;
    }
    printf("%d\n",ans[now^1][m][k]);
}

コードは長くありませんね
P. S. PSP S エスケープ月の間に挟ま操作以来+++毎月の試験が悪すぎる+++食べ物多すぎて、今は顔がなく、フルタイムで半分になっています(ヘッドティーチャーとコーチ応募時に両方のレベルに合格できないと推定されているため、2年生で試験を受けることはできません...NOIPNOIPしかできない方法はありませんN O I P元の質問は、知識のポイントを確認することです...不満.jpg .jpgj p g

おすすめ

転載: blog.csdn.net/dhdhdhx/article/details/102508805