nyoj 15 括號匹配(二)(區間DP)
括號匹配(二)
描述
給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
輸入
第一行輸入一個正整數N,表示測試資料組數(N<=10)
每組測試資料都只有一行,是一個字串S,S中只包含以上所說的四種字元,S的長度不超過100
輸出
對於每組測試資料都輸出一個正整數,表示最少需要新增的括號的數量。每組測試輸出佔一行
樣例輸入
4
[]
([])[]
((]
([)]
樣例輸出
0
0
3
2
思路:區間DP
dp[i][j]表示子串i…j最少需要新增的括號數
狀態轉移:
S形如(S’)或者[S’]: dp[i+1][j-1]
S形如(S’或者[S’: dp[i+1][j]+1
S形如S’)或者S’]: dp[i][j-1]+1
長度大於1: dp[i][k]+dp[k+1][j] (i<=k<=j-1)
程式碼:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
int dp[110][110];
int main()
{
int t,n;
scanf("%d",&t);
char s[110];
while(t--)
{
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1; i<=n; ++i)
dp[i][i]=1;
for(int l=1; l<=n-1; ++l)
for(int i=1; i<=n-l; ++i)
{
int j=i+l;
dp[i][j]=inf;
if ((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))
dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
for(int k=i; k<j; ++k)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
}
printf("%d\n",dp[1][n]);
}
return 0;
}
相關推薦
nyoj 15-括號匹配(二) 模擬
題目描述: 給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。 如: []是匹配的 ([])[]是匹配的 ((]是不匹配的 ([)]是不匹配的 輸入描述: 第一行輸入一個正整數N,表示測試資料組數(N&l
nyoj 15 括號匹配(二)(區間DP)
括號匹配(二) 描述 給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。 如: []是匹配的 ([])[]是匹配的 ((]是不匹
NYOJ 15 括號匹配(二)
這個是很早之前寫的,今天又從新敲了一遍! dp[i][j]表示:從第i個位置到第j個位置至少要新增的括號數目,我們令dp[i][i]表示當前到當前位置至少新增一個括號,假如只有一個括號,那麼dp[i][i] = 1; dp[i][j]: 如果從第i
nyoj 15 括號匹配(二)
#include<cstdio> #include<iostream> #include<string.h> using namespace std; int dp[105][105]; char s[105]; #define INF
nyoj 15 括號匹配(二)
括號匹配(二) 時間限制:1000 ms | 記憶體限制:65535 KB 難度:6 描述給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。 如: []是匹配的 ([])[]是匹配的 ((]是不
括號匹配(二)(區間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[
[luoguP2216] [HAOI2007]理想的正方形(二維單調隊列)
++ pla https hide 正方形 closed log 傳送門 name 傳送門 1.先弄個單調隊列求出每一行的區間為n的最大值最小值。 2.然後再搞個單調隊列求1所求出的結果的區間為n的最大值最小值 3.最後掃一遍就行 懶得畫圖,自己體會吧。
[luoguP2601] [ZJOI2009]對稱的正方形(二維Hash + 二分 || Manacher)
getchar() cst ons pro color tar zjoi fine long 傳送門 很蒙蔽,不知道怎麽搞。 網上看題解有說可以哈希+二分搞,也有的人說用Manacher搞,Manacher是什麽鬼?以後再學。 對於這個題,可以從矩陣4個角
LeetCode 543. Diameter of Binary Tree (二叉樹的直徑)
tween res edge public level 距離 sent java dot Given a binary tree, you need to compute the length of the diameter of the tree. The diamet
LeetCode 563. Binary Tree Tilt (二叉樹的傾斜度)
tor init 要求 += esc runtime 目標 兩個 out Given a binary tree, return the tilt of the whole tree. The tilt of a tree node is defined as the a
CentOS7 LNMP+phpmyadmin環境搭建(二、LNMP環境搭建)
用戶 lib 關聯 cin 特殊 get deb 分號 yum 上一篇博客我們在虛擬機上安裝了centos7,接下來,就開始安裝lnmp環境吧。 還是跟之前一樣,進入命令行後,先使用su命令切換到root權限。 首先配置防火墻 CentOS 7.0默認使用的是firewa
selenium自動化實戰-基於python語言(二: 編寫腳本)
獲取 pat 打開 border 命令 需要 框架 attribute 一個 上一篇文章說到顯示等待和隱式等待語句,我們繼續學習下面的命令方法。 8. 定位一組元素 這裏書上是自己寫了一個頁面代碼,通過訪問本地這個頁面來舉例。但我覺得找一個現有的頁面自己琢磨更有意思,而且
mysql-5.7.18版本(二進制包安裝)-自定義安裝路徑
mysql linux lnmp mysql-5.7.18版本(二進制包安裝)-自定義安裝路徑安裝路徑:/application/mysql-5.7.181.前期準備mysql依賴libaioyum install -y libaio創建用戶mysql,以該用戶的身份執行mysqluseradd
Aizu - ALDS1_7_B Binary Trees(二叉樹的表達)
二叉 orm print sts ica nod nts sin ostream A rooted binary tree is a tree with a root node in which every node has at most two children.
MySQL(二之數據引擎)
display 一個 etx variable 所在 面向 常熟 配置 dex 什麽是數據引擎 在初識數據中曾經講過關於數據庫相關的一些概念:數據庫 表 記錄等等 mysql中建立的庫===>文件夾 庫中建立的表===>文件而現實生活中我們
前端自動化測試之UI RECORDER(二、PC錄制)
啟動服務 域名 run ports shadow 科學 兼容 webp htm PC錄制教程 準備工作: NodeJs環境 請自行先安裝好nodejs環境,在命令行執行node -v命令成功說明已經安裝成功 Chrome瀏覽器 JAVA環境 UI Recorder We
Python學習筆記015——文件file的常規操作之二(二進制文件)
cde enc blog 模式 1byte 二進制文件 整數 style rst 1 字節(byte)的單位 1KB = 2*10 Bytes 1MB = 1KB * 1024 = 2**20 Bytes 1GB = 1KB * 1K * 1K = 2**30 Bytes