all right就醬紫了spa
no!!還有就是新人開博鼓勵一下吧~~code
跟我同樣帥氣逼人的連接
我作區間dp作到如今都是三重循環,是否是區間dp必須是三重循環???
好的咱們看題,中間仍是區間dp常規的3重循環,若此區間開始和結尾相匹配,則dp[開始][結束]=dp[開始+1][結束-1]+2,反之,模擬從開始到結束的每個點,進行狀態轉移
下面是代碼: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[105][105]; 23 string zy; 24 25 int ma(int a,int b){return a>b?a:b;} 26 27 int main(){ 28 while(1){ 29 cin>>zy; 30 if(zy[0]=='e'){ 31 break; 32 } 33 z=zy.size(); 34 memset(dp,0,sizeof(dp)); 35 for(int l=1;l<z;l++){ 36 for(int i=0,j=i+l;i<z-1&&j<z;i++,j=i+l){ 37 if((zy[i]=='('&&zy[j]==')')||(zy[i]=='['&&zy[j]==']')){ 38 dp[i][j]=dp[i+1][j-1]+2; 39 } 40 for(int k=i;k<=j;k++){ 41 dp[i][j]=ma(dp[i][j],dp[i][k]+dp[k+1][j]); 42 } 43 } 44 } 45 printf("%d\n",dp[0][z-1]); 46 } 47 return 0; 48 }
all right就醬紫了spa
no!!還有就是新人開博鼓勵一下吧~~code