UVALive-8078 Bracket Sequence 简单dp
题目链接:https://cn.vjudge.net/problem/UVALive-8078
题意
括号序列T是这样定义的:
- T是个空的
- T是(T), {T}, 或者 [T]
- T是两个T组成的,比如()()就是一个T
现在给一个n个字符长的串,问以每个字符为左端点的最长括号序列是多长。
思路
显然对i这个地方可以讨论一下:
如果i是个右括号,答案是0。
如果i是个左括号:
如果以i+1为起点的最长串后边的字符与左括号匹配,答案是加上这个字符后边的最长串。
如果不匹配,答案是0。
细节上注意不要越界即可,边界是dp[strlen]=0
提交过程
AC |
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=2e5;
char str[maxn];
int sign[300], ans[maxn];
int main(void){
int T, kase=0;
sign['(']=1;
sign['{']=2;
sign['[']=3;
sign['<']=4;
sign[')']=-1;
sign['}']=-2;
sign[']']=-3;
sign['>']=-4;
scanf("%d", &T);
while (T--){
scanf("%s", str);
memset(ans, 0, sizeof(ans));
int len=strlen(str);
for (int i=len; i>=0; i--){
int elem=sign[str[i]];
if (elem<0) ans[i]=0;
else{
if (i+1<len && sign[str[i+1]]==elem*-1) ans[i]=2+ans[i+2];
else if (i+1<len){
int nxt=sign[str[ans[i+1]+i+1]];
// printf("%d %d --\n", nxt, elem);
if (nxt==elem*-1) ans[i]=ans[i+1]+2+ans[i+ans[i+1]+2];
else ans[i]=0;
}else if (i+1>=len) ans[i]=0;
}
}
printf("Case %d:\n", ++kase);
for (int i=0; i<len; i++)
printf("%d\n", ans[i]);
}
return 0;
}
Time | Memory | Length | Lang | Submitted |
---|---|---|---|---|
49ms | None | 1116 | C++ 5.3.0 | 2018-08-24 11:28:32 |
UVALive-8078 Bracket Sequence 简单dp的更多相关文章
- Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 栈/dp
C. Longest Regular Bracket Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...
- (CodeForces - 5C)Longest Regular Bracket Sequence(dp+栈)(最长连续括号模板)
(CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per tes ...
- UVaLive 3530 Martian Mining (简单DP)
题意:给定一个n*m的网格,每个格子里有A矿和B矿数量,A必须由右向左运,B只能从下向上运,中间不能间断,问最大总数量. 析:一个简单DP,dp[i][j] 表示 从 (0, 0) 到 (i, j) ...
- 【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)
题目 传送门:QWQ 分析 洛谷题解里有一位大佬讲的很好. 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量. 代码 #include <bits/std ...
- DP UVALive 6506 Padovan Sequence
题目传送门 /* 题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大 DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + ...
- CodeForces - 224C. Bracket Sequence (栈模拟)简单做法
A bracket sequence is a string, containing only characters "(", ")", "[&quo ...
- Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence 栈
C. Replace To Make Regular Bracket Sequence 题目连接: http://www.codeforces.com/contest/612/problem/C De ...
- Codeforces Round #302 (Div. 2) C. Writing Code 简单dp
C. Writing Code Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544/prob ...
- 找规律 UVALive 6506 Padovan Sequence
题目传送门 /* 找规律:看看前10项就能看出规律,打个表就行了.被lld坑了一次:( */ #include <cstdio> #include <algorithm> #i ...
随机推荐
- 使用python脚本定时备份web网站
#!/usr/bin/env python #-*- coding: utf-8 -*- import os import time # 备份的指定目录 source = ['/data/www/Ad ...
- C# 实现自定义的USB设备与上位机进行通信(上位机部分)
因为以前没用过USB,对USB也不了解,于是上网查了很多资料,不过网上的资料都是零零散散,不清不楚的,于是我自己总结了一下,下面几个链接是网上这么多零散资料里,我觉得比较有参考意义的. USB设备连接 ...
- 关于struts值栈的总结,前端页面如何使用标签取得值栈中的数据
用户提交一次请求的执行过程 总结: struts值栈中 两个内容 一个是栈 一个是map 值栈(数据中心)的范围是一个请求 它代替了request作用域 struts自定义标签有一个特点 比如遍历集合 ...
- struts配置问题
- 洛谷—— P1803 凌乱的yyy
https://www.luogu.org/problem/show?pid=1803 题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的 ...
- 解决 Mac OS X 10.11 安装 sip 没有权限的问题
在搭建 PYQT 的过程中我遇上了一个非常恶心的问题,在安装 sip 的时候编译源代码之后的安装过程中一直提示我:Operation not permitted ,我甚至重装了系统也无济于事,终于通过 ...
- httpurlconnection get String
public static String getJSON(String url, int timeout) { HttpURLConnection c = null; try { long reque ...
- POJ 1236 Network of Schools 强连通图
Description A number of schools are connected to a computer network. Agreements have been developed ...
- Android编程获取手机型号,本机电话号码,sdk版本号及firmware版本号号(即系统版本号号)
Android开发平台中,可通过TelephonyManager 获取本机号码. TelephonyManager phoneMgr=(TelephonyManager)this.getSystemS ...
- ios OpenCv的配置和人脸识别技术
作为一个好奇心非常重的人,面对未知的世界都想去一探到底. 于是做了个人脸识别的demo. 眼下国内的关于opencv技术文章非常少.都是互相抄袭.关键是抄个一小部分还不全.时间又是非常久之前的了,和如 ...