甚至還不如我帥的連接嚶嚶嚶
這題,我們真沒什麼好說的,先開看下這道題:括號匹配問題,既然咱們已經求出最長的合法序列了,那麼,用總長一減,極爲要添加的括號數。
惟一須要注意的地方是兩題的數據範圍不同大,須要將數組由105轉至205;
這是代碼哦~~(是的我認可我水了一題。。)ios
1 #include<set> 2 #include<map> 3 #include<list> 4 #include<queue> 5 #include<stack> 6 #include<string> 7 #include<cmath> 8 #include<ctime> 9 #include<vector> 10 #include<bitset> 11 #include<memory> 12 #include<utility> 13 #include<cstdio> 14 #include<sstream> 15 #include<iostream> 16 #include<cstdlib> 17 #include<cstring> 18 #include<algorithm> 19 using namespace std; 20 21 int z,y; 22 int dp[205][205]; 23 string zy; 24 25 int ma(int a,int b){return a>b?a:b;} 26 27 int main(){ 28 scanf("%d",&y); 29 while(y--){ 30 cin>>zy; 31 if(zy[0]=='e'){ 32 break; 33 } 34 z=zy.size(); 35 memset(dp,0,sizeof(dp)); 36 for(int l=1;l<z;l++){ 37 for(int i=0,j=i+l;i<z-1&&j<z;i++,j=i+l){ 38 if((zy[i]=='('&&zy[j]==')')||(zy[i]=='['&&zy[j]==']')){ 39 dp[i][j]=dp[i+1][j-1]+2; 40 } 41 for(int k=i;k<=j;k++){ 42 dp[i][j]=ma(dp[i][j],dp[i][k]+dp[k+1][j]); 43 } 44 } 45 } 46 printf("%d\n",z-dp[0][z-1]); 47 } 48 return 0; 49 }
好的沒得講,新人開博鼓勵一下吧~~數組