zoukankan      html  css  js  c++  java
  • #456. 括号匹配问题

    跟我一样帅气逼人的链接
    我做区间dp做到现在都是三重循环,是不是区间dp必须是三重循环???
    好的我们看题,中间还是区间dp常规的3重循环,若此区间开始和结尾相匹配,则dp[开始][结束]=dp[开始+1][结束-1]+2,反之,模拟从开始到结束的每一个点,进行状态转移
    下面是代码:

     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
    ",dp[0][z-1]);
    46     }
    47     return 0;
    48 }

    all right就酱紫了

     no!!还有就是新人开博鼓励一下吧~~

  • 相关阅读:
    团队选题与评审
    消息管家
    团队展示
    功能规格说明书
    测试与优化
    git分支管理
    MVC小结
    .Net基础加强
    结对编程
    个人作业1_软件工程
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11123255.html
Copyright © 2011-2022 走看看