zoukankan      html  css  js  c++  java
  • 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)

    数据范围及提示 Data Size & Hint
     

    分类标签 Tags 

    So,具体思路见题解,好了不多说了,上题解:

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    vector<string>ans[12][12]; 
    string str[11];
    int n;
    void dfs(int l,int r)  // l,r单词的分割数目,初始还没求得所要的串,结果为空
    {
        if(ans[l][r].size())  // 存放第一个 首单词 位置为 l 尾单词位置为r的 单词串
            return;
        if(l==r)  // 仅有单个单词,放到对应的位置上
            ans[l][l].push_back(str[l]);
        else{
            for(int i=l;i<r;i++){
                dfs(l,i);
                dfs(i+1,r);  // 递归求解,各左右子串的划分形式。
                int sl=ans[l][i].size(),
                sr=ans[i+1][r].size();
                for (int j=0;j<sl;j++){  // 进行连接运算
                    for (int k=0; k<sr;k++){
                        string s;
                        s ="("+ans[l][i][j];
                        if (r-l==1) //
                            s+="*";  // 做连接运算时加*号
                        s+=(ans[i+1][r][k]+")");
                        ans[l][r].push_back(s);    // 存入一种结果
                    }
                }
            }
        }
    }
    int main() 
    {
        cin>>n;
        for (int i=1;i<=n;i++)
            cin>>str[i];
        dfs(1,n);
        int m=ans[1][n].size();
        for (int i=0;i<m;i++)
            cout<<ans[1][n][i]<<endl; // 输出所有可能结果
        return 0;
    }
    如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    centos7网络配置
    centos7安装gitlab错误解决
    数据库事务的隔离级别
    数据库事务的特性
    windows系统下安装redis扩展
    windows 7搭建基于docker的nginx, php运行环境
    php foreach 引用注意
    mysql远程连接10038
    mysql忘记root密码
    phpstorm添加sdk
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/6159034.html
Copyright © 2011-2022 走看看