递归:codevs 1251 括号
codevs 1251 括号
计算乘法时,我们可以添加括号,来改变相乘的顺序,比如计算X1, X2, X3, X4, …, XN的积,可以
(X1(X2(X3(X4(...(XN-1*XN)...)))))
:::
:::
(((...(((X1*X2)X3)X4)...)XN-1)XN)
你的任务是编程求出所有这样的添括号的方案。
输入文件第一行是一个数n(1<=n<=10),表示有n个变量,之后N行每行一个变量的名字。
输出所有的添加括号的方案。注意:单个字符不要加括号,两个字符相乘中间要有乘号。
4
North
South
East
West
(North(South(East*West)))
(North((South*East)West))
((North*South)(East*West))
((North(South*East))West)
(((North*South)East)West)
/*不要尝试从样例数据的输出中寻找什么规律,事实上就是把这些字符串的前几个组合后几个组合(因为每个组合会有多种情况,所以返回的是字符串数组),再把两个的合并,那么就枚举前后组合的长度,边界,一个字符串,直接返回,两个字符串,中间加乘号,两边加括号返回*/
#include<iostream>
using namespace std;
#include<cstdio>
#include<vector>
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 ;
}
递归:codevs 1251 括号的更多相关文章
- COdevs 1251 括号
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺序,比如计算X1, X2, X3, X4 ...
- UVALive 2056 Lazy Math Instructor(递归处理嵌套括号)
因为这个题目说明了优先级的规定,所以可以从左到右直接运算,在处理嵌套括号的时候,可以使用递归的方法,给定每一个括号的左右边界,伪代码如下: int Cal(){ if(括号) sum += Cal( ...
- codevs——T3657 括号序列
http://codevs.cn/problem/3657/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description ...
- CODEVS 3657 括号序列
[问题描述] 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合法的,那么AB和BA也是合法的 例 ...
- Codevs (3657括号序列 )
题目链接:传送门 题目大意:中文题,略 题目思路:区间DP 这个题是问需要添加多少个括号使之成为合法括号序列,那么我们可以先求有多少合法的括号匹配,然后用字符串长度减去匹配的括号数就行 状态转移方程主 ...
- codevs 2058 括号序列
2058 括号序列 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 定义满足以下规则字符串为规则序列,否 ...
- codevs1251 括号
1251 括号 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺序,比 ...
- 上一篇括号配对让人联想起catalan数,顺便转载一篇归纳的还不错的文章
转载请注明来自souldak,微博:@evagle 怎么样才是合法的组合? 只要每一时刻保证左括号的数目>=右括号的数目即可. 直接递归就行,每次递归加一个括号,左括号只要还有就能加,右括号要保 ...
- HDU 1274 展开字符串 (递归+string类)
题目链接:HDU 1274 展开字符串 中文题. 左括号进入DFS函数,右括号return到上一层. 注意return回去的是这个一层递归中的括号中的字母串. AC代码: #include<st ...
随机推荐
- EventUtil 根据IE自动适配事件
var EventUtil = { addHandler: function (element, type, handler) { if (element.addEventListener) { el ...
- No.012:Integer to Roman
题目: Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from ...
- LGLDatePickerView
这个是封装 系统的PickerView 使用也比较简单, gihub地址:https://github.com/liguoliangiOS/LGLDatePickerView.git 效果图 使用方法 ...
- phpcms v9 升级视频云问题推荐位不能添加
因为使用的是v9的早期版本,后来升级的时候没敢升级数据库,直接使用了老的数据库结构,造成[推荐位]添加不能使用,报告没有thumb列. 查看数据库果然没有,没办法要么添加相关的列,要么禁用上传缩略图. ...
- 为什么重新设计 ASP.NET?
灵活的跨平台运行时需求 早期 .NET Framework 版本一直作为单一且全面的整体进行安装,每个新版本都包含了新功能和几乎所有早期功能,而鲜有删减,这就不可避免的造成Framework的体积的增 ...
- 「C语言」单链表/双向链表的建立/遍历/插入/删除
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- Android笔记——Android中数据的存储方式(一)
Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...
- IOS单例
单例就是只有一个实例. 两种常见的创建方法: 1. : static A *a = nil; + (A *)shareInstance { if (!a) a = [[self alloc] init ...
- MyBatis入门(七)---逆向工程
一.逆向工程 1.1.概述 mybatis需要程序号自己编写的SQL. mybatis官方提供了逆向工程,可以针对单表自动生成mybatis执行所需要的代码 (mapper,java,maper.xm ...
- JAVA基础学习day18--常用工具类
一.System 1.1.概述 System 类包含一些有用的类字段和方法.它不能被实例化. 在 System 类提供的设施中,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问:加载 ...