poj1141题解
题意
空序列是规则序列;用小括号(或者方括号)把一个规则序列括起来依然是规则序列;两个规则序列并列在一起仍然是规则序列。
给出一个括号字符串S,求一个规则序列ANS,满足S是ANS的子序列且ans尽可能短。
ANS不唯一,是special judge
记录状态转移过程的dp+递归输出
先把问题变简单一点,
①只求最少需要添加多少个字符
f[l][i]表示处理从s[i]开始的l个字符需要添加的最少字符
显然
f[0][i]=0
f[1][i]=1
f[l][i] ------- s[i]...s[i+l-1]
可以拆分成AB两段来解决,枚举拆分的第一段的长度ll
ll从1到l-1
显然需要添加字符数=f[ll][i]+f[l-ll][i+ll]
f[l][i]只要取这些不同ll取法下的最小值即可
注意若s[i]与s[i+l-1]已经匹配,则可以变成(A)或[A]的模式,即可以转换成f[l-2][i+1]的问题;
ps,这里wa了一次,一开始s[i]与s[i+l-1]匹配时没有枚举ll拆分。
②如何构造出添加后的最短字符串?
只需要另开一个数组在上面f[i][j]选取最优的ll时记录下ll,那么就可以成功的缩小问题的规模。当然有可能是情况(1),这种可以特殊记录,比如记录取的ll是0.
规模可以一步步的缩小,然后终止条件——
规模足够小时——
(1)只有一个字符时,显然只需要在它右边添加对应的右括号即可
(2)只有0个字符时,什么都不干,不再缩小
#include<cstdio>
#include<cstring>
using namespace std;
const int maxl=1000;
char ss[maxl+1],s[maxl+1];
int f[maxl+1][maxl],prel[maxl+1][maxl];
inline char l2r(char a)
{
return a=='('?')':(a=='['?']':0);
}
void print(int l,int i)
{
if (l==0) return;
else if (l==1) {
switch(s[i]){
case '(':
case ')':printf("()");return;
case '[':
case ']':printf("[]");return;
}
} else if (!prel[l][i]) {
printf("%c",s[i]);
print(l-2,i+1);
printf("%c",s[i+l-1]);
} else {
print(prel[l][i],i);
print(l-prel[l][i],i+prel[l][i]);
}
}
int main()
{
int len,t,ll;
while(gets(ss)!=NULL) {
len=0;
for (int i=0;ss[i];++i)
if (ss[i]=='('||ss[i]==')'||ss[i]=='['||ss[i]==']')
s[len++]=ss[i];
for (int i=0;i<len;++i) {
f[0][i]=0;f[1][i]=1;
}
for (int l=2;l<=len;++l)
for (int i=0;i+l<=len;++i) {
f[l][i]=l+1;
for (ll=1;ll<l;++ll) {
t=f[ll][i]+f[l-ll][i+ll];
if(f[l][i]>t) {
f[l][i]=t;
prel[l][i]=ll;
}
}
if (l2r(s[i])==s[i+l-1]) {
t=f[l-2][i+1];
if(f[l][i]>t) {
f[l][i]=t;
prel[l][i]=0;
}
}
}
print(len,0);
printf("\n");
}
return 0;
}
poj1141题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- Zookeeper 介绍 原理
简介: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务. 它Google的Chubby一个开源的实现,在分布式协调技术方面做得比较好的就是Google的Chubby还有 ...
- NIO学习笔记,从Linux IO演化模型到Netty—— 究竟如何理解同步、异步、阻塞、非阻塞
我的观点 首先,分开各自理解. 1. 同步:描述两个(或者多个)个体之间的协调关系. 比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调 ...
- 在线使用iconfont字体图标
登录https://www.iconfont.cn 把需要的图标加入购物车,然后加入项目 打开我的项目,生成代码 有3中方式使用图标 unicode和font class本质都是使用字体,好处在于兼容 ...
- 处理jquery 中 给disabled属性不传值的问题
问题:审核页面加入不可编辑的判断后,点击[审核]按钮,报错,form表单的数据没有传递过去. 下面是js中加入的代码,用来判断是否是审核页面的,去掉此代码,点击[审核]按钮能正常传递数据,加入的话,无 ...
- xmppmini 项目详解:一步一步从原理跟我学实用 xmpp 技术开发 2.登录的实现
第二章登录的实现 金庸<倚天屠龙记> 张三丰缓缓摇头,说道:“少林派累积千年,方得达成这等绝技,决非一蹴而至,就算是绝顶聪明之人,也无法自创.”他顿了一顿,又道:“我当年在少林寺中住过,只 ...
- 前后端API交互如何保证数据安全性?(转)
前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用 ...
- CommunityServer的编译
1. 简介 Community Server是一个免费的开源协作系统,用于管理文档.项目.客户关系和电子邮件通信,可以在私有服务器上安装和配置.它的组成分为: 1. OnlyOfficeJabber ...
- CDC+ETL实现数据集成方案
欢迎咨询,合作! weix:wonter 名词解释: CDC又称变更数据捕获(Change Data Capture),开启cdc的源表在插入INSERT.更新UPDATE和删除DELETE活动时会插 ...
- Leetcode字典树-720:词典中最长的单词
第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点.大佬看见请直接路过. https://leetcode-cn.com/problems/longest ...
- 【01】HTML_day01_03-HTML常用标签
typora-copy-images-to: media 第01阶段.前端基础.HTML常用标签 学习目标 理解: 相对路径三种形式 应用 排版标签 文本格式化标签 图像标签 链接 相对路径,绝对路径 ...