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 ...
随机推荐
- C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...
- python第五周:模块、标准库
模块相关知识: 定义:用来从逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能)本质就是以.py结尾的python文件(文件名:test.py,对应的模块名:test) 附注:包:是用来从 ...
- 邓_ php SESSION
学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实很简单,看了下面的文章你就明白了. PHP session用法其实很简单它可以把用户提交的 ...
- http协议各版本的区别
HTTP(Hypertext transfer protocol)超文本传输协议,是一个应用层的通信协议. HTTP协议版本介绍: HTTP/0.9 :只接受GET一种请求方法,没有在通信中指定版本号 ...
- 简洁又快速地处理集合——Java8 Stream(上)
Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课. 今天 ...
- Java并发之线程间的同步协作与通信协作
1,Monitor监视器与syncrhoized实现原理 1.1:Monitor Monitor是一个同步工具,相当于操作系统中的互斥量(mutex),即值为1的信号量. 它内置与每一个Object对 ...
- Spring Boot 第一个demo
Sring boot 一直没有使用过,跳槽来到新公司,暂时没有事情就学习一下. Spring boot 这里采用的是maven 来创建的 maven项目的pom.xml 文件 <?xml v ...
- ASP.Net Cookie总结
Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...
- add Admob with Cocos2d-x on iOS
add Admob with Cocos2d-x on iOS (2013-02-27 14:12:00) 转载▼ 标签: c=blog&q=it&by=tag" targe ...
- nyoj Wythoff Game(暴力枚举)
Wythoff Game ms | KB 描写叙述 近期ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. ...