CSES Solutions
#1746Dynamic Programming

Array Description

View on CSES

Solution

1746-Array_Description.cpp
1#include<bits/stdc++.h>
2using namespace std;
3#define int long long
4constexpr int M=1e9+7;
5signed main(){
6  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
7  int n,m; cin>>n>>m;
8  int a[n]; for(auto&x:a) cin>>x;
9  int dp[n][m+2]{};
10  if(a[0]==0) for(int j=1;j<=m;++j) dp[0][j]=1;
11  else dp[0][a[0]]=1;
12  for(int i=1;i<n;++i){
13    if(a[i]==0) for(int j=1;j<=m;++j){
14      dp[i][j]=(dp[i-1][j-1]+dp[i-1][j]+dp[i-1][j+1])%M;
15    }else dp[i][a[i]]=(dp[i-1][a[i]-1]+dp[i-1][a[i]]+dp[i-1][a[i]+1])%M;
16  }
17  int ans=0;
18  for(int j=1;j<=m;++j) ans+=dp[n-1][j],ans%=M;
19  cout<<ans<<'\n';
20  return 0;
21}

Editorial not yet generated for this problem. Run the editorial generation script to add hints and detailed explanations.