URAL 1183 Brackets Sequence(DP)
题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配。
思路 : 黑书上的DP。dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i][k]+dp[k+1][j](i<=k<j)}.输出的时候递归,其实我觉得输出比dp部分难多了。。。。。
#include <stdio.h>
#include <string.h>
#include <iostream> using namespace std ; char sh[] ;
int dp[][] ,mark[][] ;
//dp数组代表的是从i到j需要添加的最少的括号是多少,mark数组代表的是从i到j在mark[i][j]这个位置添加括号可以使得添加的括号数最少 void print(int i,int j)
{
if(i > j) return ;
else if(i == j)
{
if(sh[i] == '('||sh[i] == ')')
printf("()") ;
else printf("[]") ;
}
else if(mark[i][j] == -)
{
printf("%c",sh[i]) ;
print(i+,j-) ;
printf("%c",sh[j]) ;
}
else
{
print(i,mark[i][j]) ;
print(mark[i][j]+,j) ;
}
}
int main()
{
while(gets(sh))
{
int len = strlen(sh) ;
memset(dp,,sizeof(dp)) ;
for(int i = ; i < len ; i++)
{
dp[i][i] = ;
}
for(int l = ; l < len ; l ++)//从小区间推出大区间,枚举长度
{
int temp = len - l ;
for(int i = ; i < temp ; i++)
{
int j = i + l ;
dp[i][j] = ;
if((sh[i] == '('&& sh[j] == ')')|| (sh[i] == '['&&sh[j] == ']'))
{
dp[i][j] = dp[i+][j-] ;
mark[i][j] = - ;
}
for(int k = i ; k < j ; k++)
{
int temp1 = dp[i][k] + dp[k+][j] ;
if(dp[i][j] >= temp1)
{
dp[i][j] = temp1 ;
mark[i][j] = k ;
}
}
}
}
print(,len-) ;
puts("") ;
}
return ;
}
URAL 1183 Brackets Sequence(DP)的更多相关文章
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...
- 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...
- URAL 1183 Brackets Sequence
URAL 1183 思路:区间dp,打印路径,详见http://www.cnblogs.com/widsom/p/8321670.html 代码: #include<iostream> # ...
- [原]POJ1141 Brackets Sequence (dp动态规划,递归)
本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- URAL 1586 Threeprime Numbers(DP)
题目链接 题意 : 定义Threeprime为它的任意连续3位上的数字,都构成一个3位的质数. 求对于一个n位数,存在多少个Threeprime数. 思路 : 记录[100, 999]范围内所有素数( ...
- cf13C Sequence(DP)
题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...
- URAL 1146 Maximum Sum(DP)
Given a 2-dimensional array of positive and negative integers, find the sub-rectangle with the large ...
- Arithmetic Sequence(dp)
Arithmetic Sequence Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 51 Solved: 19[Submit][Status][We ...
随机推荐
- sql server 2016 management studio没有的解决方式
最近安装sql sever2016后发现没有 management studio管理工具,无法操作sql server,可以单独下载安装后即可. 下载地址: https://msdn.microsof ...
- Libevent windows/linux下编译
1.windows下: 编译环境: windows xp sp3 + vs2010 (1) 解压libevent-2.0.21-stable.tar.gz到D:\libevent-2.0.21- ...
- 010--VS2013 C++ 平面地图贴图
先准备好地图的小图片: //全局变量HDC mdc;HBITMAP fullmap;const int rows = 8, cols = 8; //-------------------------- ...
- Mysql中将查询出来的多列的值用逗号拼接
select group_concat(字段名) from 表名
- 关于django批量上传图片
本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说 ...
- 文件和文件夹同步工具AFiles 1.0 发布
文件和文件夹同步工具AFiles 1.0 正式发布了! 本软件支持按文件日期或长度的各种比较方式来同步文件或者文件夹. 支持双向同步功能. 支持深层文件夹功能. 可以自动产生比较和同步的记录情况. ...
- CentOS 6.5下Git服务器搭建
1 . Git服务器搭建 1. 环境部署 系统环境:服务器端:CentOS 6.5 ,ip:192.168.56.1 客户端:CentOS 6.5 ,ip:192.168.56.101 软件版本:服务 ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 【Python】可变对象和不可变对象
Python在heap中分配的对象分成两类:可变对象和不可变对象.所谓可变对象是指,对象的内容是可变的,例如list.而不可变的对象则相反,表示其内容不可变. 不可变对象:int,string,flo ...
- SQL 语法 Join与Union
问题描述: Join与Union使用 问题解决: Join连接,可以分为: tableA如下: tableB如下: 1.1.Inner Join SELECT * FROM TableA INNER ...