4次元のDP次元圧縮前と後の状態に関係シーズン5月19日J-「火」ロイヤル炎オフホワイトの牛

トピックリンクします。https://ac.nowcoder.com/acm/contest/2272/Jの
影響を受ける:
ここに画像を挿入説明
私の思考をf [i]は[J] [ある :K] [W] iは格子の前に表現
jは:フロント格子全く存在しない
kは:グリッドが全くありません
W:が次のグリッド
ケースの数を。

状態は、冗長性を表します。私たちは、[j]は[[i]はFを使用 k]は私の前に格子を表し、
J:このグリッドは一切ありません
kは:なし次のグリッドが存在しない
ことには。

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int mod=1e9+7;

char s[1000005];
LL f[1000005][2][2]={0};
int main()
{
    scanf("%s", s+1);
    int n=strlen(s+1);

    f[0][0][0]=1;
    f[0][0][1]=1;
    for(int i=1; i<=n; i++){
        if(s[i]=='0'){
            f[i][0][0]+=f[i-1][0][0];
            f[i][0][0]%=mod;
        }
        if(s[i]=='1'){
            f[i][0][0]+=f[i-1][1][0];
            f[i][0][1]+=f[i-1][0][0];
            f[i][0][0]%=mod;
            f[i][0][1]%=mod;
        }
        if(s[i]=='2'){
            f[i][0][1]+=f[i-1][1][0];
            f[i][0][1]%=mod;
        }
        if(s[i]=='*'){
            f[i][1][0]+=(f[i-1][1][1]+f[i-1][0][1]);
            f[i][1][1]=f[i][1][0];
            f[i][1][0]%=mod;
            f[i][1][1]%=mod;
        }
        if(s[i]=='?'){
            f[i][1][0]+=(f[i-1][1][1]+f[i-1][0][1]);
            f[i][1][1]+=f[i][1][0];
            f[i][0][0]+=(f[i-1][1][0]+f[i-1][0][0]);
            f[i][0][1]+=f[i][0][0];
            f[i][1][0]%=mod;
            f[i][1][1]%=mod;
            f[i][0][0]%=mod;
            f[i][1][0]%=mod;
        }
    }
    printf("%lld\n", (f[n][0][0]+f[n][1][0])%mod);

    return 0;
}
公開された374元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_21433411/article/details/103225598