Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
题目地址:Ural 1183
最终把这题给A了。。
。拖拉了好长时间,。。
自己想还是想不出来,正好紫书上有这题。
d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列。0<=i<=j<len (len为输入序列的长度)。
c[i][j]为输入序列从下标i到下标j的断开位置。假设没有断开则为-1。
当i==j时。d[i][j]为1
当s[i]=='(' && s[j]==')' 或者 s[i]=='[' && s[j]==']'时,d[i][j]=d[i+1][j-1]
否则d[i][j]=min{d[i][k]+d[k+1][j]} i<=k<j , c[i][j]记录断开的位置k
採用递推方式计算d[i][j]
输出结果时採用递归方式输出print(0, len-1)
输出函数定义为print(int i, int j),表示输出从下标i到下标j的合法序列
当i>j时。直接返回,不须要输出
当i==j时。d[i][j]为1,至少要加一个括号。假设s[i]为'(' 或者')'。输出"()",否则输出"[]"
当i>j时,假设c[i][j]>=0。说明从i到j断开了。则递归调用print(i, c[i][j]);和print(c[i][j]+1, j);
假设c[i][j]<0,说明没有断开。假设s[i]=='(' 则输出'('、 print(i+1, j-1); 和")"
否则输出"[" print(i+1, j-1);和"]"
代码例如以下:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm> using namespace std;
#define LL __int64
const int INF=0x3f3f3f3f;
char s[200];
int dp[110][110], tag[110][110];
int match(char c1, char c2)
{
if((c1=='('&&c2==')')||(c1=='['&&c2==']'))
return 1;
return 0;
}
void print(int l, int r)
{
if(l>r) return ;
if(l==r)
{
if(s[l]=='('||s[l]==')')
printf("()");
else
printf("[]");
}
else if(tag[l][r]==-1)
{
printf("%c",s[l]);
print(l+1,r-1);
printf("%c",s[r]);
}
else
{
print(l,tag[l][r]);
print(tag[l][r]+1,r);
}
}
int main()
{
int n, m, i, j, len, k;
gets(s);
len=strlen(s);
if(len==0)
{
puts("");
}
memset(dp,INF,sizeof(dp));
memset(tag,-1,sizeof(tag));
for(i=0;i<len;i++)
{
dp[i][i]=1;
dp[i+1][i]=0;
}
for(i=len-2;i>=0;i--)
{
for(j=i+1;j<len;j++)
{
dp[i][j]=len+1;
if(match(s[i],s[j]))
{
dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
}
for(k=i;k<=j;k++)
{
if(dp[i][j]>dp[i][k]+dp[k+1][j])
{
dp[i][j]=dp[i][k]+dp[k+1][j];
tag[i][j]=k;
}
}
}
}
//printf("%d\n",dp[0][len-1]);
/*for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",tag[i][j]);
}
puts("");
}*/
print(0,len-1);
puts("");
return 0;
}
Ural 1183 Brackets Sequence(区间DP+记忆化搜索)的更多相关文章
- (区间dp + 记忆化搜索)Treats for the Cows (POJ 3186)
http://poj.org/problem?id=3186 Description FJ has purchased N (1 <= N <= 2000) yummy treats ...
- UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
- uva 10891 区间dp+记忆化搜索
https://vjudge.net/problem/UVA-10891 给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手, ...
- URAL 1183 Brackets Sequence(DP)
题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i] ...
- loj 1031(区间dp+记忆化搜索)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1031 思路:dp[i][j]表示从区间i-j中能取得的最大值,然后就是枚举分割点了. ...
- BZOJ1055[HAOI2008]玩具取名 【区间dp + 记忆化搜索】
题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- hdu 4597 Play Game(区间dp,记忆化搜索)
Problem Description Alice and Bob are playing a game. There are two piles of cards. There are N card ...
- poj 1088 滑雪(区间dp+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...
随机推荐
- C# 压缩图片到指定宽度,假如图片小于指定宽度 判断图片大小是否大于指定大小(KB) 如果大于则压缩图片质量 宽高不变
class Program { static void Main(string[] args) {//G:\zhyue\backup\projects\Test\ConsoleApplication1 ...
- 如何将钉钉集成到FineReport插件中
报表服务器 安装钉钉管理插件后,打开报表管理平台,管理系统下会增加钉钉管理节点,钉钉相关的配置管理都将会放在这个节点中去配置: 同时,设置定时任务的最后一步输出设置中,会增加推送钉钉消息: 钉钉企业应 ...
- 一步一步pwn路由器之radare2使用全解
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 radare2 最近越来越流行,已经进入 github 前 25了 ...
- INFO: Font Metrics and the Use of Negative lfHeight
INFO: Font Metrics and the Use of Negative lfHeight Print Email Article translations Article ID ...
- Django ORM字段类型 单表增删改查 万能的双下划线
1.ORM三种模型 模型之间的三种关系:一对一,一对多,多对多. 一对一:实质就是在主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性: 一 ...
- Promise 初步
在JavaScript的世界中,所有代码都是单线程执行的. 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以用回调函数实现: function ca ...
- CSS 小结笔记之选择器
Css选择器主要分为以下几类 类选择器 ID选择器 通配符选择器 标签选择器 伪类选择器 复合选择器 1.类选择器:通过.classname 来选择 例如 .color2 { color: rebec ...
- AWS CSAA -- 03 Identity Access Management IAM
009 IAM 101 012 IAM Summary 问题汇总: Lab1:对root account进行加固 Lab 2:利用CloudWatch设置BillingAlarm
- git repo代码部署策略及工具
一般在项目或者产品开发流程中,先是开发人员在本地做好开发及测试,其中可能包含很多用于测试用的目录以及源代码文件,在部署前往往会有一个build过程.web项目最终build产生出优化生产环境下减少ht ...
- 远程监视jboss应用java内存的配置
前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...