COdevs 1251 括号
2024-10-16 19:43:24
时间限制: 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)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector> using namespace std;
vector<string> dfs(string *ss,int begin,int end)
{
vector<string> ret;
if(begin>end) return ret;
if(begin==end)
{
ret.push_back(ss[begin]);
return ret;
}
if(begin+==end)
{
string s='('+ss[begin]+'*'+ss[end]+')';//最中间的合并
ret.push_back(s);
return ret;
}
int size1,size2;
for(int i=begin;i<end;i++)
{
vector<string> s1=dfs(ss,begin,i);
vector<string> s2=dfs(ss,i+,end);
size1=s1.size();size2=s2.size();
for(int j=;j<size1;j++)
{
for(int k=;k<size2;k++)
{
string s='('+s1[j]+s2[k]+')';// 注意题目中说这里是没有乘号的 后续的合并
ret.push_back(s);
}
}
}
return ret;
}
int main()
{
string ss[];
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
cin>>ss[i];
vector<string> ans=dfs(ss,,n);
int size=ans.size();
for(int i=;i<size;i++)
cout<<ans[i]<<endl;
return ;
}
最新文章
- 《R in Action》读书笔记(3) 数据变换
- jQuery动画效果animate和scrollTop结合使用实例
- SQLSERVER2008新增的审核/审计功能
- 打开Excel的报错,提示:不能使用对象链接和嵌入
- 弹窗的封装(css,js) 和弹窗的例子
- Unity下载文件一(www协程下载)
- uC/OS-II源码分析
- mac ping ip地址
- NAT的全然分析及其UDP穿透的全然解决方式
- yum 命令提示语法错误
- jquery easyui tree绑定静态数据的方法
- dependency injection via inversion of control
- openGL研究钞四 : 关于颜色, 尺寸, 虚线, 多边形逆转, 空洞, 使用位图
- [MFC美化] Skin++使用详解-使用方法及注意事项
- 利用JavaScript来切换样式表
- poj_3281Dining(网络流+拆点)
- Python 有序字典(OrderedDict)与 普通字典(dict)
- 原创:R包制作--windows
- findbugs 安装及使用
- Silverlight中图片显示