传送门

区间dp好题。


首先我们并不用把右括号拿进来一起dpdpdp,而是直接用左括号来dpdpdp。

然后定义状态fi,jf_{i,j}fi,j​表示区间[l,r][l,r][l,r]的合法方案数。

如果没有限制直接分三种情况讨论就行了。

  1. 形如(AB)(AB)(AB)
  2. 形如()AB()AB()AB
  3. 形如(A)B(A)B(A)B

但是现在有了限制。

因此我们枚举决策的时候判当前转移是否合法。

如何判断呢?

我们建立一个数组statstatstat。

stat[a][b]!=0stat[a][b]!=0stat[a][b]!=0表示aaa对应的右括号被要求放在bbb对应的右括号前面。

stat[a][b]=0stat[a][b]=0stat[a][b]=0表示aaa对应的右括号可以不放在bbb对应的右括号前面。

这样我们就可以判断两个位置的关系啦。

但是我们还需要判断两段区间的位置关系是否合法。

因此我们对statstatstat维护一个前缀和数组sumsumsum。

sum(a,b),(c,d)=0sum_{(a,b),(c,d)}=0sum(a,b),(c,d)​=0表示aaa$c$中的数不与$b$ddd中的数冲突。

然后转移就很方便了。

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=305,mod=998244353;
int T,n,m,f[N][N],sum[N][N];
inline int calc(int x1,int y1,int x2,int y2){return sum[x2][y2]+sum[x1-1][y1-1]-sum[x1-1][y2]-sum[x2][y1-1];}
inline int solve(){
	for(int i=1;i<=n;++i)if(calc(i,i,i,i))return 0;
	for(int i=n;i;--i){
		f[i][i]=1;
		for(int j=i+1;j<=n;++j){
			if(!calc(i,i+1,i,j))(f[i][j]+=f[i+1][j])%=mod;
			if(!calc(i+1,i,j,i))(f[i][j]+=f[i+1][j])%=mod;
			for(int m=i+1;m<j;++m)if(!calc(m+1,i+1,j,m)&&!calc(i,i+1,i,m)&&!calc(m+1,i,j,i))(f[i][j]+=1ll*f[i+1][m]*f[m+1][j]%mod)%=mod;
		}
	}
	return f[1][n];
}
int main(){
	T=read();
	while(T--){
		n=read(),m=read();
		for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)sum[i][j]=f[i][j]=0;
		for(int i=1,a,b;i<=m;++i)a=read(),b=read(),sum[a][b]=1;
		for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)sum[i][j]=sum[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
		printf("%d\n",solve());
	}
	return 0;
}

2018.10.25 bzoj4350: 括号序列再战猪猪侠(区间dp)的更多相关文章

  1. BZOJ4350: 括号序列再战猪猪侠

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...

  2. BZOJ4350: 括号序列再战猪猪侠【区间DP】

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列, ...

  3. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  4. 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)

    传送门 区间dpdpdp好题. 首先肯定需要把坐标离散化. 然后在数轴上面区间dpdpdp. 对于当前区间,区间中最大的数一定会被选. 于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在i ...

  5. UVA1626 括号序列 Brackets sequence(区间dp)

    题目传送门(洛谷)   题目传送门(UVA) 解题思路 很显然是一个区间dp,当然记忆化搜索完全可以AC,这里说一下区间dp. 区间dp的重要特征就是需要枚举中间节点k 看一看这道题,用f[i][j] ...

  6. NYOJ15|括号匹配(二)|区间DP|Elena

    括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6   描述 给你一个字符串,里面只包含"(",")","[&qu ...

  7. 2018.10.25 CCSP马拉松摸铜归来

    24号体测跑50+1000米. 50米抢跑被罚重跑???然后老年人就只能吊着一口仙气跑第二次50米.然后跑1000米,然后再到宿舍收拾行李赶往地铁站,然后再冲到火车站...(卒) 宾馆,三人挤入二人房 ...

  8. 2018.10.25 bzoj4565: [Haoi2016]字符合并(区间dp+状压)

    传送门 当看到那个k≤8k\le 8k≤8的时候就知道需要状压了. 状态定义:f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]处理完之后的状态为kkk ...

  9. 课堂笔记及知识点----UI框架简介(2018/10/25)

    UI框架学习目标: 要知道怎样套用的! 框架里面的基本执行流程 怎样开始执行(配置文件) 怎么套用 最主要的三个脚本: (也是多态的体现之一) 1).BaseUI: 作用-->提供UI能够使用的 ...

随机推荐

  1. bulk

    bulk - 必应词典 美[bʌlk]英[bʌlk] n.大部分:主体:(大)体积:大(量) v.扩展:增大:堆积起来:形成大块 网络散装:大批:大量 变形复数:bulks:现在分词:bulking: ...

  2. 在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]

    下面是我的项目的build.gradle文件的所有内容,注意高亮部分是关键: group 'com.xbs' version '1.0-SNAPSHOT' apply plugin: 'java' a ...

  3. 2017-2018-2 20165315 实验三《敏捷开发与XP实践》实验报告

    2017-2018-2 20165315 实验三<敏捷开发与XP实践>实验报告 一.编码标准 编写代码一个重要的认识是"程序大多时候是给人看的",编程标准使代码更容易阅 ...

  4. composer ip2city配置

    //根据ip获取地址信息composer require "mylukin/ip2city: dev-master" // vendor/mylukin/ip2city/src/I ...

  5. rviz1

    msckf_vio ####查看topic列表:wj@wj-Inspiron-5437:~$ rostopic list/benchmark_publisher/path/cam0/image_raw ...

  6. golang xml和json的解析与生成

    golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...

  7. git diff 分支1 分支2 --stat命令没有将所有的不同显示出来

    昨天遇到使用git diff 分支1 分支2  --stat命令时打印的文件修改列表,并不全,导致找了一下午的问题没有找到...特此记录,显示不全的原因我还没有找到,特此记录.

  8. vue通过代理实现跨域

    http://www.cnblogs.com/wangyongcun/p/7665687.html

  9. socketv 验证客户端链接的合法性

    一 .socketv 验证客户端链接的合法性 send()与sendall() 验证客户端 加密验证 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加 ...

  10. 最大子序列(java版)

    package com.algorithm.test; /** * 最大子序列 * @author LiFen * */ public class LargestSubsequence { publi ...