【区间dp】括号序列再战猪猪侠
来源:互联网 发布:原油软件手机版 编辑:程序博客网 时间:2024/06/01 12:32
ydc的题解是只需要两维状态 = =
可是。。。可是我必须写三维才能AC TAT
all表示区间[L, R]是(A) 还是 AB。。
为了O(1)判断处理一个二维数组的前缀和。。
还有这个鬼要特判 u == v的情况
#include <cstdio>#include <iostream>#include <cstring>using namespace std;int read(){int n = 0, sign = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') sign = -1; c = getchar(); }while(c >= '0' && c <= '9') { n = n*10 + c-'0'; c = getchar(); }return n * sign;}const int Mod = 998244353;const int Nmax = 305;int N, M;struct Square{int sum[Nmax][Nmax];inline void make_sum(){for (int i = 1; i <= N; ++i)for (int j = 1; j <= N; ++j)sum[i][j] += sum[i - 1][j];for (int i = 1; i <= N; ++i)for (int j = 1; j <= N; ++j)sum[i][j] += sum[i][j - 1];}inline int get_sum(int x1, int x2, int y1, int y2){int temp = sum[x2][y2] + sum[x1 - 1][y1 - 1];temp -= sum[x1 - 1][y2] + sum[x2][y1 - 1];return temp;}}s;int dp[Nmax][Nmax][2];inline void Add(int &a, int b){a += b;while (a > Mod) a -= Mod;}int dfs(int L, int R, bool all){if(L == R) return all;if(~dp[L][R][all]) return dp[L][R][all];int &ans = dp[L][R][all] = 0;if (all) {if(!s.get_sum(L + 1, R, L, L)) Add(ans, dfs(L + 1, R, 0) + dfs(L + 1, R, 1));} else for (int k = L; k < R; ++k) {if(!s.get_sum(L + 1, k, L, L) && !s.get_sum(L, L, k + 1, R) && !s.get_sum(L + 1, k, k + 1, R)) {//printf("%d %d %d\n", L, k, R);Add(ans, (long long)dfs(L, k, 1) * ( (long long)dfs(k + 1, R, 0) + dfs(k + 1, R, 1) ) % Mod);}}//printf("dp[%d][%d][%d] = %d\n", L, R, all, ans);return ans;}int main(){freopen("brackets.in", "r", stdin);freopen("brackets.out", "w", stdout);for (int T = read(); T --; ){N = read(), M = read();memset(s.sum, 0, sizeof(s.sum));bool flag = 0;while (M --){int u = read(), v = read();s.sum[v][u] = 1; if (u == v) flag = 1; }s.make_sum();memset(dp, -1, sizeof(dp));printf("%d\n", flag ? 0 : (dfs(1, N, 0) + dfs(1, N, 1)) % Mod);}return 0;}
0 0
- 【区间dp】括号序列再战猪猪侠
- 括号序列 区间DP
- 【bzoj4350】括号序列再战猪猪侠 区间DP
- BZOJ4350: 括号序列再战猪猪侠(区间DP)
- [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
- 区间DP(括号序列,uva1626)
- UVA 1626 括号序列(区间dp)
- CodeVS3657 括号序列 解题报告【区间DP】
- 【基础练习】【区间DP】codevs3657 括号序列题解
- UVa 1626 括号序列——区间DP
- 区间dp括号匹配
- poj1141 括号序列 dp
- dp uva1626 括号序列
- poj2955,括号匹配,区间dp
- nyoj+区间dp括号匹配
- poj2955Brackets【区间dp 括号匹配】
- uestc 1546 括号序列 区间线段树
- 3295: 括号序列 -(序列DP)
- iOS内购实现及测试Check List
- Java垃圾回收机制
- Sicily 13914. Train Passengers
- POJ 1008 Maya Calendar [解题报告] Java
- 关于valgrind两篇很好的文章
- 【区间dp】括号序列再战猪猪侠
- Python:日期和时间类型学习
- GCD介绍(一): 基本概念和Dispatch Queue
- 【AC自动机】 ZOJ 3494 BCD Code
- 关于OS X/linux中的回车和换行
- leetcode之Add Two Numbers
- 常见笔试题-Strcat,strcpy,strcmp,Strlen函数原型
- C Primer Plus 练习 7-9
- GCD介绍(二): 多核心的性能