迫于大佬威压来写题解,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;
}