POJ 1141

题意:给出一个表达式的子序列,要你填充这个序列,保证最终形成的序列长度最短,也就是添加的括号最少

这个子序列要遵循括号匹配的原则。

分析:转移方程dp[i][j]=min(dp[i][k],dp[k+1][j]).i<=k<j.dp[1][1]=1;

dp[i][j]表示i到j最少添加几个括号。同时用path[i][j]存插入括号的位置。递归输出。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<cstdlib>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<map>
 9 #include<queue>
10 #include<stack>
11 #include<string>
12 #include<set>
13 #define eps 1e-6
14 #define LL long long
15 #define clc(a,b) memset(a,b,sizeof(a))
16 const int maxd=1e6+10;
17 using namespace std;
18 const int MAX = 110;
19 const int INF = 0x3f3f3f3f;
20 const int mod=258280327;
21 
22 int dp[MAX][MAX],path[MAX][MAX],len;
23 char str[MAX];
24 
25 void output(int st ,int endd)
26 {
27     if(st>endd)
28         return ;
29     else if(st==endd)
30     {
31         if(str[st]=='('||str[st]==')')
32             printf("()");
33         else
34         printf("[]");
35     }
36     else if(path[st][endd]==-1)
37     {
38         printf("%c",str[st]);
39         output(st+1,endd-1);
40         printf("%c",str[endd]);
41     }
42     else
43     {
44         output(st,path[st][endd]);
45         output(path[st][endd]+1,endd);
46     }
47 }
48 
49 int main()
50 {
51 
52     while(gets(str)!=NULL)
53     {
54         clc(dp,0);
55         len=strlen(str);
56         for(int i=0;i<len;i++)
57             dp[i][i]=1;
58         for(int l=1;l<len;l++)
59         {
60             for(int i=0;i<=len-l;i++)
61             {
62                 int j=i+l;
63                 if(str[i]=='('&&str[j]==')'||str[i]=='['&&str[j]==']')
64                 {
65                     dp[i][j]=dp[i+1][j-1];
66                     path[i][j]=-1;
67                 }
68                 else
69                     dp[i][j]=INF;
70                 for(int k=i;k<=j-1;k++)
71                 {
72                     if(dp[i][j]>dp[i][k]+dp[k+1][j])
73                     {
74                         dp[i][j]=dp[i][k]+dp[k+1][j];
75                         path[i][j]=k;
76                     }
77                 }
78             }
79         }
80         output(0,len-1);
81         printf("\n");
82     }
83     return 0;
84 }
View Code

 

转载于:https://www.cnblogs.com/ITUPC/p/4820389.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP array_count_values() 函数用于统计数组中所有值出现的次数。

定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数。 本函数返回一个数组&#xff0c;其元素的键名是原数组的值&#xff0c;键值是该值在原数组中出现的次数。 语法 array_count_values(array) 参数 描述 array 必需。规定输入的数组。 例子 <?php …

SpringDay01

一&#xff1a;什么是Spring。 简单的理解就是一个可以装web层&#xff0c; service层&#xff0c; dao层&#xff0c;这三层对象的容器。 二&#xff1a;Spring搭建 1.导包&#xff1a;核心四个包和log4j两个包 2.注册对象&#xff1a;User类 3.书写配置注册对象到容器 a>导…

bom_clear.php,thinkphp清除BOM方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼在utf-8编码文件中BOM在文件头部&#xff0c;占用三个字节&#xff0c;用来标示该文件属于utf-8编码&#xff0c;现在已经有很多软件识别bom头&#xff0c;但是还有些不能识别bom头&#xff0c;比如PHP就不能识别bom头&#xff0c;…

(算法)Trapping Rain Water I

题目&#xff1a; Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. 思路&#xff1a; 题目的意思是说&…

字符数组拷贝与strcpy函数

代码&#xff1a; char str1[10],str2[10];for (int i0;i<10;i){str1[i]a;}strcpy(str2,str1); 让找出错误的地方。 先来看下strcpy函数&#xff1a; 使用格式&#xff1a;char* strcmp&#xff08;char* buffer&#xff0c;char*str&#xff09;功 能: 把从str地址开始且含…

java中的NAN和INFINITY

2019独角兽企业重金招聘Python工程师标准>>> java浮点数运算中有两个特殊的情况&#xff1a;NAN、INFINITY。 1、INFINITY&#xff1a; 在浮点数运算时&#xff0c;有时我们会遇到除数为0的情况&#xff0c;那java是如何解决的呢&#xff1f; 我们知道&#xff0c;在…

php框架tp5工作流程,tp5框架流程

之前没怎么了解过&#xff0c;但用过TP3.2.网上查了下说是区别很大&#xff0c;特此记录下。流程&#xff1a;1.入口文件默认是 public目录下的index.php// 定义应用目录define(APP_PATH, __DIR__ . /../application/);// 加载框架引导文件require __DIR__ . /../thinkphp/star…

有移动规则2

import org.robochina.airobot.tank.*; import org.robochina.math.*; import java.awt.geom.*; import java.util.*;/*** 这个类对应一个机器人&#xff0c;根据需要实现相应的Action处理函数&#xff0c;* 就可以订制自己的机器人。*/ public class Text extends SimpleRobot…

Troubleshooting(三):网络

2019独角兽企业重金招聘Python工程师标准>>> 前言 在 Troubleshooting 过程中&#xff0c;检查完进程信息后&#xff0c;接下来就是排查网络情况的时候了&#xff0c;初略翻过《TCP/IP 详解卷一&#xff1a;协议》这本书&#xff0c;简直跟看《深入理解 Linux 内核》…

SqlServer 备份还原教程

看了众多教程&#xff0c;自己也写个增强记忆&#xff0c;错误地方麻烦指出。 ———————————————————————-备份——————————————————————– 1.打开数据库&#xff0c;成功连接 2.找到要备份的数据库&#xff0c;图中演示备份数据库te…

php通过实现excel导入,php实现excel导入数据

表单页面 if($_POST [import]"导入数据 "){$leadExcel$_POST[leadExcel];//echo $leadExcel;die;if($leadExcel "true"){//echo "OK";die();//获取上传的文件名$filename $_FILES[inputExcel][name];//上传到服务器上的临时文件名$tmp_name $…

深入理解计算机系统----读书笔记

第二部分 信息的表示和处理 信息存储&#xff1a; 二进制&#xff08;0101001&#xff09;&#xff0c; 八进制&#xff0c;十六进制&#xff08;0x32FD&#xff09; 字&#xff08;word size&#xff09;指明整数和指针数据的标称大小&#xff08;normal size&#xff09;&…

FiddlerScript-常用总结

没有用过Fiddler的人应该对FiddlerScript没啥感触&#xff0c;我是真心觉得FiddlerScript对测试有一定的帮助哈。在web前端开发过程中&#xff0c;Fiddler是最常用的一款调试工具&#xff0c;那对于测试来说&#xff0c;对测试来说也是一大利器。在大多数情况下&#xff0c;通过…

OpenStack-Zun 使用

Zun组件简介 Zun是Openstack中提供容器管理服务的组件&#xff0c;于2016年6月建立。Zun的目标是提供统一的Openstack API用于启动和管理容器&#xff0c;支持多种容器技术。Zun原来称为Higgins&#xff0c;后改名为Zun。 Zun计划支持多种容器技术&#xff0c;Docker&#xff0…

【优雅代码】深入浅出 妙用Javascript中apply、call、bind

这篇文章实在是很难下笔&#xff0c;因为网上相关文章不胜枚举。 巧合的是前些天看到阮老师的一篇文章的一句话&#xff1a; “对我来说&#xff0c;博客首先是一种知识管理工具&#xff0c;其次才是传播工具。我的技术文章&#xff0c;主要用来整理我还不懂的知识。我只写那些…

PHP笔记随笔

1.CSS控制页面文字不能复制&#xff1a; body{-webkit-user-select:none;} 2.【php过滤汉字和非汉字】 $sc"aaad....##--__i汉字过滤"; //iconv("UTF-8","GB2312",$sc);utf-8转码 echo $temperegi_replace("[^\x80-\xff]",""…

qt linux 添加库文件路径,Linux下Qt调用共享库文件.so

jvm--4垃圾收集6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈.虚拟机栈,随方法或者线 ...GET和POSTAjax与Comet 1. Ajax Asynchronous Javascriptxml :能够向服…

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一、总结 一句话总结&#xff1a;两者都是对表单进行序列化&#xff0c;serializeArray()返回的是json对象&#xff0c;serialize()返回的是json形式的字符串&#xff0c;使用起来都是一样的 1、$&#x…

HDU 2842 Chinese Rings(矩阵高速功率+递归)

职务地址&#xff1a;HDU 2842 这个游戏是一个九连环的游戏。 如果当前要卸下前n个环。由于要满足前n-2个都卸下&#xff0c;所以要先把前n-2个卸下。须要f(n-2)次。然后把第n个卸下须要1次&#xff0c;然后这时候要卸下第n-1个。然后此时前n-2个都已经被卸下了。这时候把前n-2…

硬链接与软连接

linux系统硬链接和软连接&#xff1a; 1文件都由文件名和数据组成&#xff0c;在linux中文件被分为两个部分&#xff1a;用户数据和元数据。用户数据&#xff1a;即文件数据块&#xff0c;记录真实数据的地方。元数据&#xff1a;文件的附加属性&#xff0c;记录文件的大小&…