第十二周作業 最大括號

2021-10-06 03:57:34 字數 1367 閱讀 2147

一、題目

我們給出以下「正則括號」序列的歸納定義:

空序列是乙個普通的括號序列

如果s是乙個正則方括號序列,那麼(s)和[s]是正則方括號序列

如果a和b是正則中括號序列,那麼ab就是乙個正則中括號序列。

沒有其他序列是乙個普通的括號序列

例如,下面所有的字串行都是正則括號序列:

(), , (), (), (), ()[()]

而下列字串行不是:

(,],)(, ()], ()

給定乙個括號的字串行a1a2…an,你的目標是找到的長度最長正則括號序列的子串行s。

樣例:給定初始序列([(])],子串行中最長的正則括號為[()]。

二、輸入

輸入測試檔案將包含多個測試用例。每個輸入測試用例由一行組成,其中只包含字元(、)、[和];每個輸入測試的長度都在1到100之間。檔案結束由包含單詞「end」的行標記,不應該被處理。

三、輸出

對於每個輸入情況,程式應該將最長的可能的正則括號子串行的長度列印在一行上。

四、樣例輸入輸出

input

((()))

()()()

(]))[)(

([)end

output

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...