[BZOJ4350] 括号序列再战猪猪侠 题解
我们设 \(dp_{i,j}\) 表示第 \(i\) 到第 \(j\) 个括号合并为序列且最外层不是括号 \(i\) 的可能性,\(f_{i,j}\) 表示最外层是括号 \(i\) 的可能性。则有:
dp_{i,j}=\sum f_{i,k}(dp_{k+1,j}+f_{k+1,j})\\
f_{i,j}=dp_{i+1,j}+f_{i+1,j}
\end{cases}
\]
当然,并不是所有情况都能合并,所以需要维护 \(p_{i,j,k}\) 和 \(q_{i,j,k}\),表示 \(k\) 能否接在 \(i\) 到 \(j\) 的左侧/包住 \(i\) 到 \(j\)。
时间、空间复杂度均为 \(O(n^3)\)。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=305,md=998244353;
int t,n,m,f[N][N],dp[N][N];
int p[N][N][N],q[N][N][N];
void solve(){
	memset(dp,0,sizeof(dp));
	memset(f,0,sizeof(f));
	memset(p,0,sizeof(p));
	memset(q,0,sizeof(q));
	cin>>n>>m;
	int flag=0;
	while(m--){
		int x,y;cin>>x>>y;
		if(x==y||flag){
			flag=1;
			continue;
		}if(x<y) q[y][y][x]=1;
		else p[x][x][y]=1;
	}if(flag){
		cout<<"0\n";
		return;
	}for(int i=1;i<=n;i++)
		f[i][i]=1;
	for(int ln=2;ln<=n;ln++)
		for(int i=1,j=ln;j<=n;i++,j++)
			for(int k=1;k<=n;k++){
				p[i][j][k]|=p[i+1][j][k]|p[i][i][k];
				q[i][j][k]|=q[i+1][j][k]|q[i][i][k];
			}
	for(int i=1;i<=n;i++)
		for(int j=i;j<=n;j++)
			for(int k=1;k<=n;k++)
				p[i][j][k]+=p[i][j][k-1];
	for(int ln=2;ln<=n;ln++)
		for(int i=1,j=ln;j<=n;i++,j++){
			for(int k=i;k<j;k++){
				if(p[k+1][j][k]-p[k+1][j][i-1]) continue;
				if(p[i][k][j]-p[i][k][k]) continue;
				dp[i][j]=(dp[i][j]+(ll)f[i][k]*(dp[k+1][j]+f[k+1][j])%md)%md;
			}if(!q[i+1][j][i]) f[i][j]=(f[i+1][j]+dp[i+1][j])%md;
		}
	cout<<(dp[1][n]+f[1][n])%md<<"\n";
}int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--) solve();
	return 0;
}
												
											[BZOJ4350] 括号序列再战猪猪侠 题解的更多相关文章
- [BZOJ 4350]括号序列再战猪猪侠  题解(区间DP)
		
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
 - BZOJ4350: 括号序列再战猪猪侠
		
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...
 - BZOJ4350: 括号序列再战猪猪侠【区间DP】
		
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列, ...
 - 2018.10.25 bzoj4350: 括号序列再战猪猪侠(区间dp)
		
传送门 区间dp好题. 首先我们并不用把右括号拿进来一起dpdpdp,而是直接用左括号来dpdpdp. 然后定义状态fi,jf_{i,j}fi,j表示区间[l,r][l,r][l,r]的合法方案数. ...
 - 【BZOJ】1095: [ZJOI2007]Hide 捉迷藏   括号序列+线段树
		
[题目]BZOJ 1095 [题意]给定n个黑白点的树,初始全为黑点,Q次操作翻转一个点的颜色,或询问最远的两个黑点的距离,\(n \leq 10^5,Q \leq 5*10^5\). [算法]括号序 ...
 - 【UR #2】猪猪侠再战括号序列 题解
		
题目链接 前言 是的没脑子选手只会做签到题. 思路分析 一开始把题目看成反转括号的状态,直接浪费 \(40\ mins\) . 我们考虑把不确定的"正确括号"转换成一个固定的括号序 ...
 - uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
		
#31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...
 - 学长小清新题表之UOJ 31.猪猪侠再战括号序列
		
学长小清新题表之UOJ 31.猪猪侠再战括号序列 题目描述 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫\(\_CallMeGGBond\). 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领 ...
 - UOJ#31 【UR #2】猪猪侠再战括号序列
		
传送门http://uoj.ac/problem/31 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其 ...
 - uoj problem 31 猪猪侠再战括号序列
		
题目大意: 给定一个长度为2n的括号序列.定义一个关于区间[l,r]的翻转操作为位置平移对调. 即翻转")))()("可以得到"()()))((" 用不超过n次 ...
 
随机推荐
- API开发与管理规范v1.0
			
1. 协议规范 为了确保不同业务系统之间以及前后端的的数据交互的快捷性,通讯协议统一约定如下: 对内调用的API接口统一使用 HTTP协议 对外互联网发布的API建议使用HTTPS协议也可以使用HTT ...
 - 中电金信鲸视:以AI视觉技术为复杂行业场景装上“火眼金睛”
			
 作为人工智能和计算机视觉的交叉领域,智能视觉通过仿生人类视觉机能,对不同形式的视觉输入进行处理.理解和决策.现今,智能视觉已成为应用广泛.市场覆盖大.形式多样的产业方向,得到了国家政策的大力支持. ...
 - 在 d2js 使用多种数据源如spring数据源
			
不少人误以为 d2js 只能通过 database.js 指定一个数据库,是一个单数据库方案.实际上 d2js 也可以使用多个数据库. 在 WEB-INF/jslib/d2js/base.js 的末尾 ...
 - Getting Started with JavaFX
			
https://openjfx.io/openjfx-docs/#maven Run HelloWorld using Maven If you want to develop JavaFX appl ...
 - Qt/C++音视频开发49-推流到各种流媒体服务程序
			
一.前言 最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx.LiveQing.EasyDarwin.nginx-rtmp.ZLMediaKit.srs.A ...
 - 网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
			
本文由转转QA刘宝成分享,原题"抓包工具wireshark的使用",下文进行了排版和内容优化. 1.引言 跟网络通信有关的应用场景下(比如Web系统.IM聊天应用.消息推送系统等) ...
 - 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.1版已发布
			
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
 - Docker简易操作
			
Docker简易操作 1.启动docker sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...] sudo docker run -d -p 8009: ...
 - BotSharp:又一个.Net重磅AI开源项目,.Net在AI领域开始崛起!
			
大家好,我是编程乐趣. 自从大模型爆火以来,.Net不管是官方.还是社区开源项目,都陆续推出很多重磅的项目. 在AI领域,对话即平台(CaaP)是未来的发展方向. 下面介绍一个开源项目,面向AI Bo ...
 - Docker 多平台打包错误
			
1. Multi-platform build is not supported for the docker driver. 问题 因为 Docker 默认使用的 builder 不支持多架构构建镜 ...