首页 > 代码库 > COdevs 1251 括号
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 }
COdevs 1251 括号
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。