又几天没写博客了,大二的生活实在好忙碌啊,开了五门专业课,每周都是实验啊实验啊实验啊。。。。我说要本月刷够60题,但好像完不成了,也就每天1题的样子。如今写动规还是挺有条理的,包括这道需要打印轨迹,其实就是在POJ 2955的基础上进行下修改,记录下动规的方向,再用递归逆向输出即可!

是个区间DP,如果 括号i和括号k匹配了,则 dp[i][j]=max(dp[i][j],dp[i][k]+1+dp[k+1][j])这个转移方程挺重要的,我一开始就是这个方程没写好。。弄得思路混乱了

还有就是一开始不知道为什么总是OLE,说我输出太多,我看了下POJ的discuss,说这道题的数据里面有一些空行或者乱字符,要用gets读取字符串,不能用scanf。果然AC

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
using namespace std;
map<char,int> mp;
bool vis[];
void init()
{
mp.insert(pair<char,int>('(',));
mp.insert(pair<char,int>(')',-));
mp.insert(pair<char,int>('[',));
mp.insert(pair<char,int>(']',-));
}
char ch[];
int dp[][];
int dir[][];
void putdown(int x)
{
if (ch[x]=='(' || ch[x]==')')
printf("()");
else
printf("[]");
}
void print(int l,int r)
{
if (l==r && dir[l][r]==-){
putdown(l);
return;
}
if (dir[l][r]==- ||l>r) return;
if (dir[l][r]==-)
{
print(l,r-);
putdown(r);
return;
}
if (dir[l][r]==-)
{
putdown(l);
print(l+,r);
return;
}
printf("%c",ch[l]);
print(l+,dir[l][r]-);
printf("%c",ch[dir[l][r]]);
print(dir[l][r]+,r);
}
int main()
{
init();
while (gets(ch))
{
if(ch[]=='e') break;
int i,j,k,len;
len=strlen(ch);
memset(dp,,sizeof dp);
memset(vis,,sizeof vis);
memset(dir,-,sizeof dir); for (k=;k<len;k++)
{
for (i=;i<len-k;i++)
{
int p=i+k;
int temp=dp[i][p]; if (temp<=dp[i][p-]){
temp=dp[i][p-];
dir[i][p]=-;
} if (temp<dp[i+][p]){
temp=dp[i+][p];
dir[i][p]=-;
}
dp[i][p]=temp; for (j=i+;j<=p;j++)
{
if (mp[ch[i]]==-mp[ch[j]] && mp[ch[i]]>)
{ if (dp[i][p]<dp[i+][j-]++dp[j+][p])
{
dp[i][p]=dp[i+][j-]++dp[j+][p];
dir[i][p]=j;
}
}
}
}
}
print(,len-);
putchar('\n');
}
return ; }

POJ 1141 经典DP 轨迹打印的更多相关文章

  1. poj 1141 区间dp+递归打印路径

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30383   Accepted: 871 ...

  2. POJ 1141 区间DP

    给一组小括号与中括号的序列,加入最少的字符,使该序列变为合法序列,输出该合法序列. dp[a][b]记录a-b区间内的最小值, mark[a][b]记录该区间的最小值怎样得到. #include &q ...

  3. POJ 1737 经典DP

    问题:求含有n个点的连通图的个数. 解: 考虑DP,$f(n)$表示n个点,每个点都和点1相连,且n个点互相连通的图的个数. (蓝字非常重要,这个条件有效地避免了重复计算) $g(n)$表示n个点,每 ...

  4. 括号序列问题 uva 1626 poj 1141【区间dp】

    首先考虑下面的问题:Code[VS] 3657 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合 ...

  5. poj 1050 To the Max 最大子矩阵和 经典dp

    To the Max   Description Given a two-dimensional array of positive and negative integers, a sub-rect ...

  6. POJ 1160:Post Office 邮局经典DP

    Post Office Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17168   Accepted: 9270 Desc ...

  7. HDU 1003 Max Sum --- 经典DP

    HDU 1003    相关链接   HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...

  8. poj1458 求最长公共子序列 经典DP

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45763   Accepted: 18 ...

  9. NYOJ - 矩形嵌套(经典dp)

    矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...

随机推荐

  1. leetcode617 Merge Two Binary Trees

    """ Given two binary trees and imagine that when you put one of them to cover the oth ...

  2. HTML学习第二天

    HTML学习第二天 今天学的比较少,有些乱,先只写一个知识点 三种样式表插入方式 外部样式表: <link rel="stylesheet" type="text/ ...

  3. CocosCreator - 向上传递事件(冒泡)

    /** *   分发事件到事件流中. *   this.node.dispatchEvent(new cc.Event.EventCustom("name",是否向上传递)) *  ...

  4. Linux系统下的/etc/nsswitch.conf文件

    一.什么是nsswithch.conf(服务搜索顺序)文件呢? nsswitch.conf(name service switch configuration,名字服务切换配置)文件位于/etc目录下 ...

  5. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  6. 035-PHP简单定义一个闭包函数

    <?php /* + 什么是闭包函数?即一个函数内部,包含了1-N个匿名函数, + 用处是可以做局部数据缓存与实现封装(有点类似class) */ # 函数内部,定义一个匿名函数,即可称为闭包函 ...

  7. select2 智能补全模糊查询select2的下拉选择框使用

    我们在上篇文章中已经在SpringMVC基础框架的基础上应用了BootStrap的后台框架,在此基础上记录select2的使用. 应用bootstrap模板 基础项目源码下载地址为: SpringMV ...

  8. metaspace 元空间

    为何移除持久代 它的大小是在启动时固定好的, 很难进行调优 -XX:MaxPermSize(默认64M) HotSpot 的内部类型也是Java对象: 它可能会在Full GC中被移动, 同时它对应用 ...

  9. Java8 新特性_Lambda 表达式

    1. Java8新特性_简介 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 减少空指针异常的容器 Optional 2. ...

  10. python函数-迭代器&生成器

    python函数-迭代器&生成器 一.迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议: ① 协议内容:内部实现__iter__方法 ...