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;
}
相關文章
- Pots POJ – 3414 (搜尋+記錄路徑)
- POJ 3071 Football(概率DP)
- POJ 3267 The Cow Lexicon(dp)
- [狀壓dp] 最短Hamilton路徑(模板題+狀壓dp)
- wordpress 記錄php-error.log路徑PHPError
- 一類哈密頓路徑/迴路為背景的狀壓dp
- 簡單dp -- Common Subsequence POJ - 1458
- POJ1390 Blocks (區間DP)BloC
- Pots(POJ - 3414)【BFS 尋找最短路+路徑輸出】
- POJ3252Round Numbers(數位dp)
- Making the Grade POJ - 3666(離散化+dp)
- D. Coloring BracketsRacket
- 2023 5月 dp做題記錄
- 2023 6月 dp做題記錄
- 2023 7月 dp做題記錄
- CentOS 個人目錄下中文路徑轉英文路徑CentOS
- dp 套 dp(dp of dp)小記
- 計數 dp 做題記錄(日更)
- 【筆記】DP最佳化技巧目錄筆記
- 【MFC】BROWSEINFO設定路徑,支援記憶上次路徑
- Qt 程式獲取程式所在路徑、使用者目錄路徑、臨時資料夾等特殊路徑的方法QT
- 「暑期訓練」「基礎DP」 Common Subsequence (POJ-1458)
- poj--2778DNA Sequence+AC自動機+矩陣快速冪矩陣
- 優先佇列的學習記錄--例題:Expedition(POJ2431)佇列
- poj--1625Censored!+AC自動機上的dp+大數
- 在laravel框架中獲取storage目錄的路徑Laravel框架
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- larave 日誌自定義配置格式記錄呼叫檔案路徑與行號
- python基本操作-檔案、目錄及路徑Python
- Qt 記住上次開啟路徑QT
- 尤拉路徑學習筆記筆記
- [BUG反饋]預設後臺用cookie記錄操作路徑然後返回,可能導致後臺路徑洩露問題Cookie
- sequence to sequence模型模型
- 絕對路徑和相對路徑的區別,
- mysql之 表資料存放路徑非datadir目錄MySql
- Python中怎麼判斷路徑是否為目錄?Python
- springfox-swagger-ui 在二級目錄下的路徑問題SpringSwaggerUI
- canvas 路徑與子路徑Canvas
- uvm的sequence