hdu 4192
dfs全排列 加 模拟计算
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#define maxn 10010
using namespace std; bool vis[10];
int value[10], result, n, now[10],top;
char expr[100];
int check(int l, int r)
{
if(l > r)
return 0;
int cnt = 0,p = -1,flag = 0;
for(int i = l; i <= r; i++)
if(expr[i] == '(')
++cnt;
else if(expr[i] == ')')
--cnt;
else if((expr[i] == '+' || expr[i] == '-') && !cnt)
flag = 1, p = i;
else if((expr[i] == '*') && !cnt && !flag)
p = i;
if( p == -1 )
{
if( l == r )
{
return now[top++];
}
return check(l+1, r-1);
}
switch(expr[p])
{
case '+':
return check(l,p-1) + check(p+1,r);
case '-':
return check(l,p-1) - check(p+1,r);
case '*':
return check(l,p-1) * check(p+1,r);
}
return 0;
}
int dfs(int cur)
{
if( cur == n )
{
top = 0;
int len = strlen(expr);
if(check(0, len-1) == result)
return 1;
// printf("%d\n",check(0,len-1));
}
for(int i = 0; i < n; i++)
{
if( !vis[i] )
{
vis[i] = true;
now[cur] = value[i];
if(dfs(cur+1))
return 1;
vis[i] = false;
}
}
return 0;
}
int main()
{
while( scanf("%d",&n) == 1 )
{
if(n == 0)
{
scanf("%d",&result);
if(result == 0)
break;
}
for(int i = 0; i < n; i++) scanf("%d",&value[i]);
scanf("%d",&result);
scanf("%s",expr);
int flag = 0;
for(int i = 0; i < n; i++)
{
memset(vis, false, sizeof(vis));
vis[i] = true;
now[0] = value[i];
if(dfs(1))
{
flag = 1;
break;
}
vis[i] = false;
}
if( flag ) puts("YES");
else puts("NO");
}
return 0;
}
使用stl中的全排列函数
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define maxn 10010
using namespace std; int value[10], result, n, top;
char expr[100];
int check(int l, int r)
{
if(l == r)
return value[top++];
int cnt = 0,p = -1,flag = 0;
for(int i = l; i <= r; i++)
if(expr[i] == '(') cnt++;
else if(expr[i] == ')') cnt--;
else if((expr[i] == '+' || expr[i] == '-') && !cnt) flag = 1, p = i;
else if((expr[i] == '*') && !cnt && !flag) p = i;
if( p == -1 )
return check(l+1, r-1);
switch(expr[p])
{
case '+':
return check(l,p-1) + check(p+1,r);
case '-':
return check(l,p-1) - check(p+1,r);
case '*':
return check(l,p-1) * check(p+1,r);
}
return 0;
} int main()
{
while( scanf("%d",&n) == 1 )
{
if(n == 0)
{
scanf("%d",&result);
if(result == 0)
break;
}
for(int i = 0; i < n; i++) scanf("%d",&value[i]);
scanf("%d",&result);
scanf("%s",expr);
int flag = 0;
int len = strlen(expr);
sort(value, value+n);
do
{
top = 0;
if(check(0, len-1) == result)
{
flag = 1;
break;
}
}while(next_permutation(value, value+n));
if( flag ) puts("YES");
else puts("NO");
}
return 0;
}
hdu 4192的更多相关文章
- hdu 4192 (表达式求值)
<题目链接> <转载于 >>> > 题目大意: 给你n个数,和一个最终的结果,再给你一个含有n个不同变量的式子,问你这个式子最终能否得到指定的答案. 解题分 ...
- UVALive 4192/HDU 2959 Close Enough Computations 数学
Close Enough Computations Problem Description The nutritional food label has become ubiquitous. A sa ...
- hdu 4193 Non-negative Partial Sums 单调队列。
Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- 选用 get 与 post 的一些建议
1.http的请求方法:get post 2. get:会把请求的内容 放到链接地址里面(数据请求的时候 默认的是get请求) 例:www.baidu.com/user/login?userna ...
- log4j定义某个类的日志级别
项目引入了定时任务后,当我把已有的定时任务删除后,控制台一直会打出类似于 [org.springframework.scheduling.quartz.LocalDataSourceJobStore] ...
- COM 学习小记录
COM组件程序:模块,它可以是 动态连接库(DLL) && 可执行程序(EXE),称为 进程内组件(in-of-process component) && 进程外组件( ...
- Unity编程回忆录之控制物体移动
最新心血来潮,然后开始学习Unity3D游戏开发引擎,对于一个主流的跨平台3D游戏开发引擎,我已经深深的为他着迷了,于是果断的开始学习这个引擎,而且刚刚预装的游戏引擎最新版中4.3版本已经开始原生支持 ...
- Java多线程(二) 多线程的锁机制
当两条线程同时访问一个类的时候,可能会带来一些问题.并发线程重入可能会带来内存泄漏.程序不可控等等.不管是线程间的通讯还是线程共享数据都需要使用Java的锁机制控制并发代码产生的问题.本篇总结主要著名 ...
- Centos7下安装netstat
刚安装centos7发想没有查看端口的命令 netstat yum install net-tools
- spring 计划任务:cron表达式
Cron表达式是一个字符串,字符串以5或6个空格隔开,分开工6或7个域,每一个域代表一个含义,Cron有如下两种语法 格式: Seconds Minutes Hours DayofMonth Mont ...
- 【转】sqlserver查询数据库中有多少个表
sql server 数表: select count(1) from sysobjects where xtype='U' 数视图: select count(1) from sysobjects ...
- 如何使用Git——(二)
8.首次安装git,然后要把创建好的仓库放到github上,首先,你要先做一些基本设置,继续设置吧~~. 在git黑框框中输入 ssh-keygen -t rsa -C "your ema ...
- delphi 仅带下划线的TEdit控件
在做录入框的时候,很希望有一个只带下划线的文本框,网上介绍的很多,有自己做组件的,须不知Delphi下只需要简单设置几个属性即可达到目的.