CSES - Shared codeLink to this code:
https://cses.fi/paste/39929d29368d4355aac3e4/
#ifdef ONLINE_JUDGE
#define debug(...);
#else
#include "dbg/template.cpp"
#endif
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
#define oo 1000000010
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int const mod = (int)1e9+7;
int dp[100001][101], arr[100001];
int ln,m;
int depee(int idx, int last){
if (idx==ln){
return 1;
}
if (abs(arr[idx]-last)>1 && arr[idx]){
return 0;
}
int &ret = dp[idx][last];
if (ret!=-1){
return ret;
}
ret = 0;
if (arr[idx]){
return ret = depee(idx+1,arr[idx])%mod;
}
if (idx==0){
for (int i = 1 ; i <= m ; i++){
ret=(ret+depee(idx+1,i))%mod;
}
}else{
for (int i : {last-1,last,last+1}){
if (1<=i && i<=m){
ret = (ret+depee(idx+1,i))%mod;
}
}
}
return ret;
}
void burn(){
// يارب يشتغل
cin >> ln >> m;
for (int i = 0 ; i < ln ; i++){
cin >> arr[i];
}
for (int i = 0 ; i < 10001 ; i++){
for (int j = 0 ; j < 101 ; j++){
dp[i][j] = -1;
}
}
cout << depee(0,arr[0]) << endl;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
int t=1;
// cin >> t;
while (t--){
burn();
}
return (0-0);
}