一、題目
我們給出以下「正則括號」序列的歸納定義:
空序列是乙個普通的括號序列
如果s是乙個正則方括號序列,那麼(s)和[s]是正則方括號序列
如果a和b是正則中括號序列,那麼ab就是乙個正則中括號序列。
沒有其他序列是乙個普通的括號序列
例如,下面所有的字串行都是正則括號序列:
(), , (), (), (), ()[()]
而下列字串行不是:
(,],)(, ()], ()
給定乙個括號的字串行a1a2…an,你的目標是找到的長度最長正則括號序列的子串行s。
樣例:給定初始序列([(])],子串行中最長的正則括號為[()]。
二、輸入
輸入測試檔案將包含多個測試用例。每個輸入測試用例由一行組成,其中只包含字元(、)、[和];每個輸入測試的長度都在1到100之間。檔案結束由包含單詞「end」的行標記,不應該被處理。
三、輸出
對於每個輸入情況,程式應該將最長的可能的正則括號子串行的長度列印在一行上。
四、樣例輸入輸出
input
((()))output()()()
(]))[)(
([)end
664五、解題思路06
區間dp例題。將大區間分割成小區間。
遍歷所有長度的區間,i為左端點,j為右端點,如果ij為「()」 「[]」,則轉移方程為f[i][j]=f[i+1][j-1]+2。
列舉區間斷點k,轉移方程為f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]),其中i<=k<=j,即對選不選k做乙個判斷。 最後f[0][n]即最長的區間結果即為答案。
六、樣例**
#include
#include
#include
using
namespace std;
int f[
110]
[110];
string s;
int len;
intmain()
for(
int k=i;k<=j;k++
)//斷點 }}
cout<[len-1]
<}return0;
}
第十二周作業
例題1 includeusing namespace std struct date struct student int main stu1,stu2 stu1.num 1001 stu1.age 20 stu2 stu1 cout includeusing namespace std struc...
第十二周作業
1 多文件窗體 mdi form 功能演示 2 日期控制項datetimepicker功能演示 3 月曆控制項monthcalender功能演示 4 樹型列表控制項treeview功能演示 tn.expand 展開tn節點 treeview1.selectednode tn1 把新增節點設定為當前選...
第十二周作業
一.jpanel 方法型別 描述public jpanel 構造建立乙個預設的jpanel物件,使用流布局管理器 public jpanel layoutmanager layout 構造建立乙個指定布局管理器的jpanel物件 二.jsplitpane 三.jtabbedpane 四.jscrol...