Hong's conditions

    xiaoxiao2021-04-16  231

    #include #include

    using namespace std; const int maxn=100005; const int maxm=105; const long long mod=1E9+7;

    long long f[maxn][maxm][2]; int a[maxn]; int n;

    inline void init() { for (int i=1;i<=100;i++) { if (a[1]==-1) { f[1][i][0]=1; f[1][i][1]=0; } else { if (a[1]==i) { f[1][i][0]=1; f[1][i][1]=0; } else { f[1][i][0]=0; f[1][i][1]=0; } } } }

    int main() { scanf("%d", &n); for (int i=1;i<=n;i++) { scanf("%d", &a[i]); } init(); for (int i=2;i<=n;i++) {

    for (int j=1;j<=100;j++) { f[i][j][0]=0; f[i][j][1]=0; } long long tmp0=0; long long tmp1=0; for (int j=1;j<=100;j++) { f[i][j][0]+=tmp0; f[i][j][0]+=tmp1; f[i][j][0]%=mod; tmp0+=f[i-1][j][0]; tmp0%=mod; tmp1+=f[i-1][j][1]; tmp1%=mod; } tmp1=0; for (int j=100;j>=1;j--) { tmp1+=f[i-1][j][1]; tmp1%=mod; f[i][j][1]+=tmp1; f[i][j][1]+=f[i-1][j][0]; f[i][j][1]%=mod; } if (a[i]>=0) { for (int j=1;j<=100;j++) { if (j!=a[i]) { f[i][j][0]=0; f[i][j][1]=0; } } } } long long ans=0; for (int i=1;i<=100;i++) { ans+=f[n][i][1]; ans=ans%mod; } printf("%lld\n", ans); return 0;

    }


    最新回复(0)