CF508E Arthur and Brackets

我在赛场上想都没想直接DP

\(O(n^3)\)过了

但别人说正解是栈+贪心

讲讲DP

\(bool\) \(dp[i][j]\)表示从第i对括号至第j对括号是否在ans中能变成一段连续的区间

转移(\(check(a,b)\)表示\(a=(a || b)\)):

  • 可以第i对括号中间包含第i+1对括号至第j对括号: \(check(dp[i][j],dp[i+1][j])\)
  • 可以由多段相接的连续区间组成(\(i\leq k<j\)): \(check(dp[i][j],dp[i][k]\& \& dp[k+1][j])\)

    发现不用优化\(O(n^3)\)就能过

    (记得记录每个\(dp\)是从哪里推过来的)

    ACcode
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define FOR(i,j,k) for(register int i=j;(j<k)?(i<=k):(i>=k);i+=(j<k)?1:(-1))
#define IO ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define N 666 int n,r;
bool dp[N][N];//从第i对括号至第j对是否能是一段连续区间
int fang[N][N];//我从哪里推来~
pair<int,int> ku[N];
void dfs(int x,int y){
if(x==y) cout<<"()";
else if(fang[x][y]==-1){
cout<<"(";
dfs(x+1,y);
cout<<")";
}else{
dfs(x,fang[x][y]);
dfs(fang[x][y]+1,y);
}
}
signed main(){
IO;
memset(dp,0,sizeof dp);
cin>>n;
FOR(i,1,n)cin>>ku[i].first>>ku[i].second;
FOR(i,1,n)dp[i][i]=(bool)(ku[i].first==1);
FOR(i,2,n){
FOR(l,1,n-i+1){
r=l+i-1;
//dp[l][r]准备就绪
if(dp[l+1][r] && ku[l].first-1<=(r-l)*2 && (r-l)*2<=ku[l].second-1){
dp[l][r]=1;
fang[l][r]=-1;
}else{
FOR(k,l,r-1){//k~k+1之间为断点
if(dp[l][k] && dp[k+1][r]){
dp[l][r]=1;
fang[l][r]=k;
break;
}
}
}
}
}
if(dp[1][n]){
dfs(1,n);
cout<<endl;
}else cout<<"IMPOSSIBLE"<<endl;
return 0;
}

讲讲正解

这是一道括号匹配问题,因此我们考虑使用栈模拟。

因为两对括号要么包含要么相离

所以每次存左括号

右括号肯定优先匹配栈顶左括号

剩下的就是模拟

最新文章

  1. 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)
  2. Openlayers自定义简单popup
  3. windows 下 gvim打开默认全屏显示
  4. sql 统计用的sql
  5. netback于kthread遇到cpu affinity问题
  6. 安装mysql的遇到的问题
  7. Spring定时器实现(二)
  8. 设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开
  9. Sublime Text3安装evernote插件
  10. mongo中用嵌套结构优势是什么
  11. dhcp搭建
  12. 软工实践作业2:个人项目实战之Sudoku
  13. Meta referrer标签的,可以防止CSRF的攻击
  14. 10-02 Java 形式参数和返回值的问题深入研究,链式编程
  15. android 解决studio生成aar包并在其他工程引用aar包的坑,不需要任何gradle配置
  16. Sql server字段排序,如果字段是字符型的数字
  17. Android图片压缩工具MCompressor
  18. c++动态规划dp算法题
  19. WebService初识
  20. 【bzoj3561】DZY Loves Math VI 莫比乌斯反演

热门文章

  1. 使用 antd 的 form 组件来自定义提交的数据格式
  2. Qt5之正则表达式
  3. GetX代码生成IDEA插件,超详细功能讲解(透过现象看本质)
  4. 从一个跨二十年的glibc bug说起
  5. Linux(一)——简介
  6. QT开发实战一:图片显示
  7. Selenium系列(十七) - Web UI 自动化基础实战(4)
  8. adb 常用命令大全(3)- 查看手机设备信息
  9. DPDK应用示例指南简介(汇总)
  10. 交换机之vlan详解