[区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
来源:互联网 发布:微信附近人采集软件 编辑:程序博客网 时间:2024/06/09 23:26
蒟蒻不会做
这里讲的蛮详细的
#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define read(x) scanf("%d",&(x))#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;const int P=998244353;const int N=305;int n,m;int s[N][N];inline int sum(int a,int b,int c,int d){ return s[c][d]-s[c][b-1]-s[a-1][d]+s[a-1][b-1];}ll f[N][N];int main(){ int Q,x,y; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(Q); while (Q--){ read(n); read(m); int flag=0; for (int i=1;i<=m;i++) { read(x),read(y),s[x][y]=1; if (x==y && !flag) printf("0\n"),flag=1; } if (flag) goto W; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) s[i][j]+=s[i-1][j]; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) s[i][j]+=s[i][j-1]; for (int i=1;i<=n;i++) f[i][i]=1; for (int l=2;l<=n;l++) for (int i=1;i+l-1<=n;i++){ int j=i+l-1; if (!sum(i,i+1,i,j)) (f[i][j]+=f[i+1][j])%=P; if (!sum(i+1,i,j,i)) (f[i][j]+=f[i+1][j])%=P; for (int k=i+1;k<=j-1;k++) if (!sum(k+1,i,j,k) && !sum(i,i+1,i,k)) (f[i][j]+=f[i+1][k]*f[k+1][j]%P)%=P; } printf("%lld\n",f[1][n]); W:cl(f); cl(s); } return 0;}
0 0
- [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
- 【区间dp】括号序列再战猪猪侠
- 括号序列 区间DP
- 【bzoj4350】括号序列再战猪猪侠 区间DP
- BZOJ4350: 括号序列再战猪猪侠(区间DP)
- 区间DP(括号序列,uva1626)
- UVA 1626 括号序列(区间dp)
- CodeVS3657 括号序列 解题报告【区间DP】
- 【基础练习】【区间DP】codevs3657 括号序列题解
- UVa 1626 括号序列——区间DP
- 括号匹配区间dp/数据结构题
- 区间dp括号匹配
- poj1141 括号序列 dp
- dp uva1626 括号序列
- BZOJ 2037 区间DP
- 区间DP BZOJ 1260
- poj2955,括号匹配,区间dp
- nyoj+区间dp括号匹配
- GDUT1174:我是好人4(容斥定理)
- 汉诺塔问题
- PB对数据窗口的查询语句进行动态修改
- 安装安卓studio
- 开篇
- [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
- 将给定的字符串与给定的长度的汉字字符串两端对齐
- 1.4 叉积
- c++ 构造函数注意事项
- codeforces 554d[补]
- Plugin is too old, please update to a more recent version问题根本解决办法
- 主键生成策略优劣比较以及应用
- Android杂谈(22)GreenDAO的使用
- 【b604】2K进制数