POJ 1141 Brackets Sequence(記錄路徑的dp)
這是在看書的時候遇到的一到練習題,演算法設計程式設計實驗P200.但是感覺書上寫錯了啊P201的判斷if((str[i] == '(' && str[j] == ')') || (str[i] == '[' && str[j] == ']'))之後不能直接返回而作者寫了continue。此時匹配的不一定是最優啊。
Brackets Sequence
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 23667 | Accepted: 6673 | Special Judge |
Description
Let us define a regular brackets sequence in the following way:
1. Empty sequence is a regular sequence.
2. If S is a regular sequence, then (S) and [S] are both regular sequences.
3. If A and B are regular sequences, then AB is a regular sequence.
For example, all of the following sequences of characters are regular brackets sequences:
(), [], (()), ([]), ()[], ()[()]
And all of the following character sequences are not:
(, [, ), )(, ([)], ([(]
Some sequence of characters '(', ')', '[', and ']' is given. You are to find the shortest possible regular brackets sequence, that contains the given character sequence as a subsequence. Here, a string a1 a2 ... an is called a subsequence of the string b1 b2 ... bm, if there exist such indices 1 = i1 < i2 < ... < in = m, that aj = bij for all 1 = j = n.
1. Empty sequence is a regular sequence.
2. If S is a regular sequence, then (S) and [S] are both regular sequences.
3. If A and B are regular sequences, then AB is a regular sequence.
For example, all of the following sequences of characters are regular brackets sequences:
(), [], (()), ([]), ()[], ()[()]
And all of the following character sequences are not:
(, [, ), )(, ([)], ([(]
Some sequence of characters '(', ')', '[', and ']' is given. You are to find the shortest possible regular brackets sequence, that contains the given character sequence as a subsequence. Here, a string a1 a2 ... an is called a subsequence of the string b1 b2 ... bm, if there exist such indices 1 = i1 < i2 < ... < in = m, that aj = bij for all 1 = j = n.
Input
The input file contains at most 100 brackets (characters '(', ')', '[' and ']') that are situated on a single line without any other characters among them.
Output
Write to the output file a single line that contains some regular brackets sequence that has the minimal possible length and contains the given sequence as a subsequence.
Sample Input
([(]
Sample Output
()[()]
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-7
#define M 1000100
#define LL __int64
//#define LL long long
#define INF 0x7fffffff
#define PI 3.1415926535898
using namespace std;
const int maxn = 110;
int dp[maxn][maxn];
int pre[maxn][maxn];
char str[maxn];
void dfs_printf(int i, int j)
{
if(i > j)
return;
if(i == j)
{
if(str[i] == '(' || str[i] == ')')
cout<<"()";
else
cout<<"[]";
}
else
{
if(pre[i][j] == -1)
{
cout<<str[i];
dfs_printf(i+1, j-1);
cout<<str[j];
}
else
{
dfs_printf(i, pre[i][j]);
dfs_printf(pre[i][j]+1, j);
}
}
}
int main()
{
cin >>str;
int n = strlen(str);
memset(dp, 0 , sizeof(dp));
for(int i = 0; i < n; i++)
dp[i][i] = 1;
for(int r = 1; r < n; r++)
{
for(int i = 0; i < n-r; i++)
{
int j = i+r;
dp[i][j] = INF;
if((str[i] == '(' && str[j] == ')') || (str[i] == '[' && str[j] == ']'))
{
dp[i][j] = dp[i+1][j-1];
pre[i][j] = -1;
}
for(int k = i; k < j; k++)
{
if(dp[i][j] > dp[i][k]+dp[k+1][j])
{
pre[i][j] = k;
dp[i][j]=dp[i][k]+dp[k+1][j];
}
}
}
}
dfs_printf(0, n-1);
cout<<endl;
return 0;
}
相關文章
- POJ1141 ZOJ1463 Brackets Sequence【區間dp】Racket
- pku 1141 Brackets SequenceRacket
- POJ 3373 Changing Digits(記錄路徑的dp)Git
- POJ2955 Brackets (區間DP)Racket
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- 【基礎dp路徑記錄】HDU 1160 FatMouse's Speed
- Codeforces 453B Little Pony and Harmony Chest:狀壓dp【記錄轉移路徑】
- wordpress 記錄php-error.log路徑PHPError
- POJ 2478-Farey Sequence(尤拉函式)函式
- 一類哈密頓路徑/迴路為背景的狀壓dp
- POJ1849Two[DP|樹的直徑](擴充套件HDU4003待辦)套件
- BracketsRacket
- POJ1745Divisibility(dp)
- POJ 3581-Sequence(字尾陣列)陣列
- JAVA 取得當前目錄的路徑/Servlet/class/檔案路徑/web路徑/url地址JavaServletWeb
- poj 1180 dp的斜率優化優化
- POJ 2486 Apple Tree(樹形dp)APP
- POJ 1925 Spiderman(線性dp)IDE
- POJ 3744 概率dp+矩陣矩陣
- 【C#學習筆記】瀏覽目錄得到路徑C#筆記
- dp 套 dp(dp of dp)小記
- 計數 dp 做題記錄(日更)
- POJ1160 Post Office[序列DP]
- 【dp】POJ 1015 Jury CompromisePromise
- POJ 3249-Test for Job(拓撲排序&&DP)排序
- POJ 3107 Godfather(樹形dp)Go
- POJ 3017 單調佇列dp佇列
- POJ 3691 DNA repair (AC自動機 + dp)AI
- 【MFC】BROWSEINFO設定路徑,支援記憶上次路徑
- Java獲取WEB目錄路徑JavaWeb
- 【Ac自動機+矩陣加速】poj 2778 DNA Sequence矩陣
- POJ2487Farey Sequence(尤拉函式&&法雷級數)函式
- Qt 程式獲取程式所在路徑、使用者目錄路徑、臨時資料夾等特殊路徑的方法QT
- 【樹形dp】poj 1947 Rebuilding RoadsRebuild
- POJ 1664 放蘋果 (基礎組合dp)蘋果
- java獲取硬碟根目錄的本地路徑Java硬碟
- 我使用的brackets外掛Racket
- poj 3764 最長異或路徑(二進位制trie樹)