【題解】CSES 1746 Array Description

【題目敘述】https://cses.fi/problemset/task/1746/
【解題想法】DP

#include <iostream>
using namespace std;
 
int n, m, a, dp[100005][105], mod = 1e9+7;
 
int main() {
    cin >> n >> m;
    cin >> a;
    if (a == 0){
        for (int i = 1; i <= m; i++){
            dp[0][i] = 1;
        }
    }
    else dp[0][a] = 1;
    for (int i = 1; i < n; i++){
        cin >> a;
        if (a){
            dp[i][a] += dp[i-1][a-1];
            dp[i][a] %= mod;
            dp[i][a] += dp[i-1][a];
            dp[i][a] %= mod;
            dp[i][a] += dp[i-1][a+1];
            dp[i][a] %= mod;
        }
        else{
            for (int a = 1; a <= m; a++){
                dp[i][a] += dp[i-1][a-1];
                dp[i][a] %= mod;
                dp[i][a] += dp[i-1][a];
                dp[i][a] %= mod;
                dp[i][a] += dp[i-1][a+1];
                dp[i][a] %= mod;
            }
        }
    }
    int ans = 0;
    for (int i = 1; i <= m; i++){
        ans += dp[n-1][i];
        ans %= mod;
    }
    cout << ans << "\n";
}
分享本文 Share with friends