FZU 2030 括号问题(回溯)
两种做法,一种dp,一种dfs,因为这个数据比较小,所以dfs全排列的方式是可以接受的,但是当比较大的时候就不行了,所以dp的方式还是要掌握一下的,我这里是dfs的做法,网上有很多人写的dp,可以去看一下,尤其是当遍历到右括号的时候的处理方式需要好好想一想
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[];
int len,ans,mark[];
bool ok()
{
int lena = strlen(a),tot = ;
for(int i = ;i < lena;i++)
{
if(a[i] == '(')
tot++;
if(a[i] == ')')
tot--;
if(a[i] == '?')
return false;
if(tot < ) return false;
}
if(tot != ) return false;
return true;
}
void dfs(int now)
{
if(now == len)
{
if(ok()) ans++;
return;
}
a[mark[now]] = '(';
dfs(now+);
a[mark[now]] = ')';
dfs(now+);
}
int main()
{
while(~scanf("%s",a))
{
int lena = strlen(a);
len = ;
for(int i = ;i < lena;i++)
{
if(a[i] == '?')
{
mark[len++] = i;
}
}
ans = ;
dfs();
printf("%d\n",ans);
}
return ;
}
FZU 2030 括号问题(回溯)的更多相关文章
- [ An Ac a Day ^_^ ] FZU 2030 括号问题 搜索
FZU一直交不上去 先写在这吧 #include<stdio.h> #include<iostream> #include<algorithm> #include& ...
- FZU Problem 2030 括号问题
Problem Description 给出一个字符串,其中包括3种字符: ‘(‘, ‘)’, ‘?’.其中?表示这个字符可以是’(‘也可以是’)’. 现在给出字符串S,你可以在’?’处填写’(‘ 或 ...
- leetcode-生成括号(回溯算法)
转载出处:https://blog.csdn.net/yanerhao/article/details/68561290 生成括号 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生 ...
- [LeetCode] 22. 括号生成 ☆☆☆(回溯)
描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...
- FZU2030 括号问题(dp)
Problem 2030 括号问题 Accept: 398 Submit: 753Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- [ZJOI2007]捉迷藏(动态点分治/(括号序列)(线段树))
题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...
- CSP2019螺旋升天爆炸记
Day -N 半年没碰OI的我终于又回到了这个熟悉又陌生的地方.然后颓废了两天就过了初赛? 初赛rp爆棚考了全校第一,然并卵 然后就是打了遍树状数组模板,写挂了(没错我现在连树状数组都会写挂) 看一眼 ...
- Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)
Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...
- LeetCode刷题笔记-回溯法-括号生成
题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "( ...
随机推荐
- zencart 自定义函数
---------------------------------------------------------------------------------------------------- ...
- Ubuntu基本命令--apt, dpkg
一.Ubuntu中软件安装方法 1.APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install so ...
- assert()函数用法
assert是定义在头文件cassert中的宏 其作用是如果他的返回值不为真则终止程序. assert(expression); if 为假,先向stderr打印一条错误信息,再用abort终止程序 ...
- IoC容器Autofac正篇之简单实例(四)
先上一段代码. namespace ConsoleApplication3 { class Program { static void Main(string[] args) { ContainerB ...
- sscanf用法
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源. 1. 常见用法. 1 2 3 char buf[512] ; sscanf(" ...
- PHP数组函数试题
使用Ctrl+A查看答案 1.将数组的键名全部转换成小写和大写的函数是什么?答:array_change_key_case($array [,CASE_LOWER|CASE_UPPER]) 2.创建一 ...
- java动态代理(1)
来源:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html# java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代 ...
- s7-300 第一讲
s7-300的电源模块可选,s7-400必选
- spice-vdagent
The spice-vdagent should be running in the guest. Have you installed the spice guest tools in your w ...
- c++ map unordered_map
map operator<的重载一定要定义成const.因为map内部实现时调用operator<的函数好像是const. #include<string> #include& ...