提交时间:2024-11-28 13:13:34
运行 ID: 35146
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=2007; const int mod=998244353; inline void Add(int &x,int y){ x+=y;x-=(x>=mod?mod:0); } int n; bool s[maxn]; int dp[maxn][maxn]; int Sum[maxn][maxn]; signed main(){ cin>>n; for(int i=1;i<=n;i++){ char t;cin>>t; s[i]=t-'0'; } dp[0][0]=Sum[0][0]=1; for(int i=0;i<n;i++){ Sum[i][0]=dp[i][0]; for(int j=1;j<=i;j++)Sum[i][j]=(Sum[i][j-1]+dp[i][j])%mod; if(s[i+1]==0){ for(int j=0;j<=i;j++)Add(dp[i+1][j+1],j*dp[i][j]%mod); for(int j=1;j<=i+1;j++)Add(dp[i+1][j],Sum[i][j-1]); } else for(int j=0;j<=i;j++)Add(dp[i+1][j],dp[i][j]*(i-j+1)%mod); } int ans=0; for(int i=0;i<=n;i++)Add(ans,dp[n][i]); cout<<ans<<endl; }