Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35146 | A21μΘ_wjy | 【S】T2 | C++ | 通过 | 100 | 29 MS | 68220 KB | 840 | 2024-11-28 13:13:34 |
#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; }