当时都在草稿本上把答案,给推出来了,就是没敢往DP上想,找了半天的规律,都没有看出来DP,真的是菜到家了…
解析
len是数字长度,i代表当前选的第一个数字是什么;
当i=1时,我们发现只有两个情况:dp[len-1][i]+dp[len-1][i+1]
当i=9时,dp[len-1][i-1]+dp[len-1][i]
else,有三个情况dp[len-1][i-1]+dp[len-1][i+1]+dp[len-1][i]
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1000100,mod=998244353;
long long dp[N][10];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<10;i++) dp[1][i]=1;
for(int len=2;len<=n;len++){
for(int i=1;i<10;i++){
if(i==1) dp[len][i]=(dp[len-1][i]+dp[len-1][i+1])%mod;
else if(i==9) dp[len][i]=(dp[len-1][i-1]+dp[len-1][i])%mod;
else dp[len][i]=(dp[len-1][i-1]+dp[len-1][i+1]+dp[len-1][i])%mod;
}
}
long long ans=0;
for(int i=1;i<10;i++){
ans=(ans+dp[n][i])%mod;
}
cout<<ans<<endl;
return 0;
}```