zoukankan      html  css  js  c++  java
  • Codeforces Round #518 (Div. 2) D(计数DP)

    #include<bits/stdc++.h>
    using namespace std;
    const long long mod=998244353;
    int n;
    int a[100007];
    long long dp[100007][207][3];//第i位值为j时k是否成立,k=0,i<i-1,k=1,i==i-1,k=2,i>i-1


    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=200;i++){
            if(a[1]!=-1&&a[1]!=i)
                dp[1][i][0]=0;
            else
                dp[1][i][0]=1;
            dp[1][i][1]=dp[1][i][2]=0;
        }
        long long sum=0;
        for(int i=2;i<=n;i++){
            sum=0;
            for(int x=1;x<=200;x++){
                if(a[i]!=-1&&a[i]!=x)
                    dp[i][x][0]=0;
                else
                    dp[i][x][0]=sum;
                sum+=(dp[i-1][x][0]+dp[i-1][x][1]+dp[i-1][x][2])%mod;
                sum%=mod;
            }
            for(int x=1;x<=200;x++){
                if(a[i]!=-1&&a[i]!=x)
                    dp[i][x][1]=0;
                else
                    dp[i][x][1]=(dp[i-1][x][0]+dp[i-1][x][1]+dp[i-1][x][2])%mod;
            }
            sum=0;
            for(int x=200;x>=1;x--){
                if(a[i]!=-1&&a[i]!=x)
                    dp[i][x][2]=0;
                else
                    dp[i][x][2]=sum;
                sum+=(dp[i-1][x][1]+dp[i-1][x][2])%mod;
                sum%=mod;
            }
        }
        long long ans=0;
        for(int i=1;i<=200;i++)
            ans+=(dp[n][i][1]+dp[n][i][2])%mod,ans%=mod;
        printf("%lld",ans);
        return 0;

    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10030016.html
Copyright © 2011-2022 走看看