zoukankan      html  css  js  c++  java
  • ZOJ 1463 Brackets Sequence

    题目本身,没什么好说的了。记得第一天练DP的时候就是叫我做的这个题,这个哪里做得出来啊。现在怎么说也比原来好点了。

    这个题实际上是跟POJ 1141是一样的,几乎一模一样。

    但是这个ZOJ太奇葩了,这个题目的输入让我无语了。后来我看了一下提交的结果。。提交了两千多次,没有PE,只有WA。。。这个就无语了,题目要求的那些空行让人凌乱啊。

    下面贴代码:

    View Code
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 const int MAX = 1<<30;
     6 char str[120];
     7 int a[120][120],dp[120][120];
     8 void printans(int i,int j)
     9 {
    10     if(i > j)
    11         return;
    12     if(i == j)
    13     {
    14         if(str[i] == '(' || str[i] == ')')
    15             cout<<"()";
    16         if(str[i] == '[' || str[i] == ']')
    17             cout<<"[]";
    18     }
    19     else if(a[i][j] == -1)
    20     {
    21         cout<<str[i];
    22         printans(i + 1,j - 1);
    23         cout<<str[j];
    24     }
    25     else
    26     {
    27         printans(i,a[i][j]);
    28         printans(a[i][j] + 1,j);
    29     }
    30 }
    31 int main()
    32 {
    33     int ncase,n,i,j,k,m,len;
    34     cin>>ncase;
    35     getchar();
    36     for(n = 1;n <= ncase;n++)
    37     {
    38         if(n > 1)
    39             cout<<endl;
    40         getchar();
    41         cin.getline(str,101);
    42         len = strlen(str);
    43         for(i = 0;i < len;i++)
    44         {
    45             for(j = 0;j < len;j++)
    46             {
    47                 if(i < j)
    48                     dp[i][j] = MAX;
    49                 else if(i == j)
    50                     dp[i][j] = 1;
    51                 else
    52                     dp[i][j] = 0;
    53             }
    54         }//初始化dp数组
    55         for(m = 1;m <= len;m++)
    56         {
    57             for(i = 0;i < len - m;i++)
    58             {
    59                 j = i + m;
    60                 if((str[i] == '(' && str[j] == ')') || (str[i] == '[' && str[j] == ']'))
    61                 {
    62                     dp[i][j] = dp[i + 1][j - 1];
    63                     a[i][j] = -1;
    64                 }
    65                 for(k = i;k <= j;k++)
    66                 {
    67                     int t = dp[i][k] + dp[k + 1][j];
    68                     if(t < dp[i][j])
    69                     {
    70                         dp[i][j] = t;
    71                         a[i][j] = k;
    72                     }
    73                 }
    74             }
    75         }//for i
    76         printans(0,len - 1);
    77         cout<<endl;
    78     }//while
    79     return 0;
    80 }
  • 相关阅读:
    23种设计模式中的模板模式
    23种设计模式中的外观模式
    div,li,span自适应宽度换行问题
    监听自定义ItemRender的事件
    flex acionscript png图片去除多余空白,生成合适大小图片
    项目中用到RouteTable,发布到IIS7中无法访问
    记录Castle ActiveRecord访问Sqlite的配置
    如何卸载软件
    linux 下route命令
    linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/2455683.html
Copyright © 2011-2022 走看看