括號匹配(二)(區間dp)
括號匹配(二)
題目描述:
給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
輸入描述:
第一行輸入一個正整數N,表示測試資料組數(N<=10) 每組測試資料都只有一行,是一個字串S,S中只包含以上所說的四種字元,S的長度不超過100
輸出描述:
對於每組測試資料都輸出一個正整數,表示最少需要新增的括號的數量。每組測試輸出佔一行
樣例輸入:
複製4 [] ([])[] ((] ([)]
樣例輸出:
0 0 3 2
題意:找最小的數量能使所有括號匹配;
思路:區間dp[i][j] 代表著i-j的最少需求,把所以只剩自己在中間的dp[i][i]賦值1表示只需要一個就可以,然後i-j中每個小區間
i ~ k,k+1 ~ j一起查詢最小就ok了;
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MN = 150; int dp[MN][MN]; char a[MN]; bool flag(char x,char y) { if ((x == '(' && y == ')') || (x == '[' && y == ']')) return true; return false; } int main() { int i, j, n, m; while (~scanf("%d",&n)) { while (n--) { scanf("%s",a); int la = strlen(a); memset(dp,0,sizeof(dp)); for (i = 0;i < la;i++) dp[i][i] = 1; //這裡初始化的是自己獨立時沒有匹配的值; for (int len = 1;len < la;len++) //len表示你要查的區間大小i~j; { for (i = 0;i < la - len;i++) //保證j不越界 { j = i + len; dp[i][j] = 99999999;//初始化最大 if (flag(a[i],a[j])) dp[i][j] = dp[i+1][j-1]; //如果可以配對,i-j最小的需求就等於裡面一層的 for (int k = i;k <= j;k++)//i-j中找最小的需求 dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]); } } printf("%d\n",dp[0][la-1]); } } return 0; }
相關推薦
括號匹配(二)(區間dp)
括號匹配(二)題目描述:給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是
nyoj 15 括號匹配(二)(區間DP)
括號匹配(二) 描述 給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。 如: []是匹配的 ([])[]是匹配的 ((]是不匹
括號匹配(二)NYOJ15(簡單區間dp)
給定一個自然數M,及其二進位制長度N,得到一個N位的二進位制串 b1 b2 ... bN-1 bN 將該串做左旋轉,即b1移到bN後面,得到一個新的二進位制串: b2 b3 ... bN-1 bN b1 對新的二進位制串再做左旋轉,得二進位制串 b3 b4 ..
括號匹配問題(區間dp)
最小值 很好 nbsp 需要 簡單的 棧模擬 pri tex 什麽 簡單的檢查括號是否配對正確使用的是棧模擬,這個不必再說,現在將這個問題改變一下:如果給出一個括號序列,問需要把他補全成合法最少需要多少步? 這是一個區間dp問題,我們可以利用區間dp來解決,直接看代碼吧!
括號匹配 (區間dp)
區間dp 題目大意:給出一個的只有’(‘,’)’,’[‘,’]’四種括號組成的字串,求最多有多少個括號滿足匹配。 題目連結 思路:用dp[i][j]表示區間i~j的最大匹配數,對於dp[i][j] = dp[i + 1][j - 1] + (s[i]和s[
2018GDUT第一場C 遺失的二叉樹(區間dp)
問題描述: 給定一個序列,判斷其是否可能為一個二叉樹的中序遍歷序列,該二叉樹樹邊連線的兩個點的值不能互質。 輸入描述: 第一行一個數字T,表示測試組數 對於每一組測試樣例 第一行一個數字n,表示序列長度 第二行有n個數字ai,表示這個序列 T≤5,n≤500,2
LightOJ - 1422 Halloween Costumes (區間DP)
wan things strong cas book article printf ase con Description Gappu has a very busy weekend ahead of him. Because, next weekend is Ha
POJ 1141 Brackets Sequence (區間DP)
ive bsp rip mes character har typedef som memset Description Let us define a regular brackets sequence in the following way: 1.
Brackets Sequence POJ - 1141 (區間dp)
gif == urn ++ char img ems utc pre Brackets Sequence POJ - 1141 題意:給一個括號序列,問最少添加多少個括號似的原序列匹配,並輸出新序列。 用dp[i][j]表示i到j最少添加幾個括號,flag[i][j]表
Brackets POJ - 2955 (區間dp)
pla clu for eof %d img rac end racket Brackets POJ - 2955 題意:給一個括號序列,問最多有多少個括號是可以配對的。 1 #include<cstdio> 2 #include<algori
Food Delivery ZOJ - 3469 (區間dp)
位置 turn pro pan return isp ive != truct Food Delivery ZOJ - 3469 題意:快遞員送外賣,n個客戶,起始位置為x,速度為v,每個客戶單位時間不滿意度增加hi,問最少增加多少不滿意度。 每一個客戶可能是從左側送到
CSUOJ-1980 不堪重負的數(區間dp)
inline 滿二叉樹 -a ems ext div des button problems 1980: 不堪重負的樹 Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Subm
POJ 1991 Turning in Homework(區間DP)
clu sin highlight sort stream ret spa 作業 ref 題目鏈接 Turning in Homework 考慮區間DP f[i][j][0]為只考慮區間[i, j]且最後在a[i]位置交作業的答案。 f[i][j][1]為只考慮區間[
hdu6212 祖瑪(區間DP)
tro 位置 表示 中間 ron i+1 strong 就會 題意 題意 有一個長度為n的01串,我們可以在某個地方插入一個0或者1,那麽如果有連續顏色相同的>=3個,那麽這段就會消去,兩邊的合攏。問將所有01串消去,最少需要插入多少個。(n<=200)
修長城 (區間DP)
urn ret 世紀 log width hide 時間 main gif Time Limit: 1000 ms Memory Limit: 256 MB Description 大家都知道,長城在自然條件下會被侵蝕,因此,我們需要修復。現在是21世紀,
Codeforces 392E Deleting Substrin(區間dp)
read temp put tdi char i+1 void log ++ 題目大意: ? 給定vi,wi,每次可以在wi中選擇一個子段[l,r]滿足:? |wi-wi+1|=1 (l<=i<r)? 2wi-wi-1-wi+1>=0 (l<i<
【Uva10559】Blocks(區間DP)
log turn logs efi read etc body pre 數量 Description 題意:有一排數量為N的方塊,每次可以把連續的相同顏色的區間消除,得到分數為區間長度的平方,然後左右兩邊連在一起,問最大分數為多少。 \(1\leq N\leq200\) S
You Are the One HDU - 4283(區間dp)
eas value script names elf for stdio.h 表示 text You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav
Topcoder SRM 301 Div2-1000 CorrectingParenthesization(區間DP)
完全 errors 實現 括號 cor ren opc fin 區間dp 題意 給定一個長度為偶數的字符串。這個字符串由三種括號組成。 現在要把這個字符串修改為一個符合括號完全匹配的字符串,改變一個括號的代價為$1$,求最小總代價。 區間DP。令$dp[i
【BZOJ】1260 [CQOI2007]塗色paint(區間dp)
c++ ide hid event pri display pro == spl 題目 傳送門:QWQ 分析 區間dp, 詳見代碼 代碼 /*****************************************