zoukankan      html  css  js  c++  java
  • COdevs 1251 括号

    时间限制: 1 s    空间限制: 128000 KB    题目等级 : 黄金 Gold
    题目描述 Description

    计算乘法时,我们可以添加括号,来改变相乘的顺序,比如计算X1, X2, X3, X4, …, XN的积,可以

    (X1(X2(X3(X4(...(XN-1*XN)...)))))

    :::

    :::

    (((...(((X1*X2)X3)X4)...)XN-1)XN)

    你的任务是编程求出所有这样的添括号的方案。

    输入描述 Input Description

    输入文件第一行是一个数n(1<=n<=10),表示有n个变量,之后N行每行一个变量的名字。

    输出描述 Output Description

    输出所有的添加括号的方案。注意:单个字符不要加括号,两个字符相乘中间要有乘号。

    样例输入 Sample Input

    4

    North 

    South 

    East 

    West

    样例输出 Sample Output

    (North(South(East*West)))

    (North((South*East)West))

    ((North*South)(East*West))

    ((North(South*East))West)

    (((North*South)East)West)

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<vector>
     5 
     6 using namespace std;
     7 vector<string> dfs(string *ss,int begin,int end)
     8 {
     9     vector<string> ret;
    10     if(begin>end) return ret;
    11     if(begin==end)
    12     {
    13         ret.push_back(ss[begin]);
    14         return ret;
    15     }
    16     if(begin+1==end)
    17     {
    18         string s='('+ss[begin]+'*'+ss[end]+')';//最中间的合并 
    19         ret.push_back(s);
    20         return ret;
    21     }
    22     int size1,size2;
    23     for(int i=begin;i<end;i++)
    24     {
    25         vector<string> s1=dfs(ss,begin,i);
    26         vector<string> s2=dfs(ss,i+1,end);
    27         size1=s1.size();size2=s2.size();
    28         for(int j=0;j<size1;j++)
    29         {
    30             for(int k=0;k<size2;k++)
    31             {
    32                 string s='('+s1[j]+s2[k]+')';// 注意题目中说这里是没有乘号的   后续的合并 
    33                 ret.push_back(s);
    34             }
    35         }
    36     }
    37     return ret;
    38 }
    39 int main()
    40 {
    41     string ss[15];
    42     int n;
    43     scanf("%d",&n);
    44     for(int i=1;i<=n;i++)
    45       cin>>ss[i];
    46     vector<string> ans=dfs(ss,1,n);
    47     int size=ans.size();
    48     for(int i=0;i<size;i++)
    49         cout<<ans[i]<<endl;
    50     return 0;
    51 }
  • 相关阅读:
    [考试]20151017数据结构
    [考试]20151016动态规划
    [考试]20151015分治
    [BZOJ1501/NOI2005]智慧珠游戏
    [BZOJ3139/HNOI2013]比赛
    [考试]20151013搜索
    BZOJ3082: Graph2
    BZOJ4690: Never Wait for Weights
    BZOJ4668: 冷战
    BZOJ3262: 陌上花开
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6157951.html
Copyright © 2011-2022 走看看