迫于大佬威压来写题解,J比较明显的状态设计 发现区间加法 直接上差分即可
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef long long ll;
const int N = 5010;
const int mod = 998244353;
int n,m,dp[N][N*2],num[N*2];
signed main()
{
cin>>n>>m;
for(int i=-m;i<=m;i++)dp[1][i+m]=1;
for(int i=2;i<=n;i++){
memset(num,0,sizeof(num));
for(int j=-m;j<=m;j++){
if(j<0){
num[m]=(num[m]+dp[i-1][j+m])%mod;
num[j+m*2+1]=(num[j+m*2+1]-dp[i-1][j+m]+mod)%mod;
}
else{
num[-j+m]=(num[-j+m]+dp[i-1][j+m])%mod;
num[2*m+1]=(num[2*m+1]-dp[i-1][j+m])%mod;
}
}
for(int i=0;i<=2*m;i++)num[i]=(num[i]+num[i-1]%mod+mod)%mod;
memcpy(dp[i],num,sizeof(num));
}
int ans = 0;
for(int i=0;i<=2*m;i++){
ans=(ans+dp[n][i])%mod;
}
cout<<ans<<'\n';
return 0;
}