• POJ 2955 Brackets 区间合并


    输出一个串里面能匹配的括号数

    状态转移方程:

    if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')
                 dp[i][j]=dp[i+1][j-1]+2;

    然后再区间合并

     1 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<queue>
     7 #include<stack>
     8 #include<cmath>
     9 #include<set>
    10 #include<algorithm>
    11 #include<vector>
    12 // #include<malloc.h>
    13 using namespace std;
    14 #define clc(a,b) memset(a,b,sizeof(a))
    15 #define LL long long
    16 const int inf = 0x3f3f3f3f;
    17 const double eps = 1e-5;
    18 const double pi = acos(-1);
    19 // inline int r(){
    20 //     int x=0,f=1;char ch=getchar();
    21 //     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
    22 //     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    23 //     return x*f;
    24 // }
    25 int dp[110][110];
    26 char s[110];
    27 int main(){
    28     // freopen("in.txt","r",stdin);
    29     while(gets(s)!=NULL){
    30        if(s[0]=='e') break;
    31        // cout<<s<<endl;
    32        int len=strlen(s);
    33        clc(dp,0);
    34        for(int i=len-2;i>=0;i--){
    35         for(int j=i+1;j<len;j++){
    36             if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')
    37                 dp[i][j]=dp[i+1][j-1]+2;
    38             for(int k=i;k<j;k++)//区间合并
    39                 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]);
    40         }
    41        }
    42        printf("%d
    ",dp[0][len-1]);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    Redis主从复制
    maven生命周期和插件
    maven私服搭建
    为公司运营人员整理EXCEL数据小程序
    docker之本地镜像上传阿里云
    docker阿里云镜像之Tomcat
    docker环境安装
    网页及第三方连接禅道数据库
    yagmail 发送HTML格式邮件图片不显示问题解决方案
    pyechars模块安装踩得坑
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5477261.html
Copyright © 2020-2023  润新知