1 条题解
-
0

#include <cstdio> const int M = 305; const int MOD = 998244353; int read() { int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();} return x*f; } int n,m,b[M],v[M][M],a[M][M][M],dp[M][M][M]; signed main() { n=read();m=read(); for(int i=1;i<=m;i++) { int l=read(),r=read(); v[l][r]=1; } for(int r=1;r<=n;r++) { for(int l=1;l<=r;l++) if(v[l][r]) b[l]=r; for(int l=r;l>=1;l--) { for(int i=1;i<=n;i++) a[l][r][i]=a[l+1][r][i]; for(int i=l;i<=b[l];i++) a[l][r][i]=l; } } for(int i=0;i<=n;i++) for(int l=1;l+i-1<=n;l++) { int r=l+i-1,f=0; for(int i=l;i<=r;i++) f|=a[l][r][i]; if(!f) { for(int i=l-1;i<=r+1;i++) dp[l][r][i]=1; continue; } for(int i=l;i<=r;i++) if(a[l][r][i]) dp[l][r][i]=1ll*dp[l][i-1][a[l][r][i]]* dp[i+1][r][i+1]%MOD; for(int i=r-1;i>=l;i--) dp[l][r][i]=(dp[l][r][i]+dp[l][r][i+1])%MOD; } printf("%d\n",dp[1][n][1]); }
- 1
信息
- ID
- 8081
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者