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 ...
随机推荐
- 【Cocos2d入门教程六】Cocos2d-x事件篇之触摸
Cocos游戏当中产生一个事件时,可以有多个对象在监听该事件,所以有优先级(Priority).优先级越高(Priority值越小),事件响应越靠前. 关系图: 新 事件分发机制:在2.x 版本事件处 ...
- Struts升级到2.3.15.1抵抗漏洞
后知后觉,今天才开始修复Struts2的漏洞 详细情形可以参考: http://struts.apache.org/release/2.3.x/docs/security-bulletins.html ...
- 自定义DZLMoneyLabel
一.简介 由于父亲生病,好久没有更新博客了,今天10.1 国庆(应该说是昨天了,已经过了12点了),心血来潮自定义了一个小label.这个控件的难度并不大,也没有什么可以值得炫耀的技术点.写这个控件的 ...
- 关于IE8以上 不引人css 症状
不知道各位有没有体验过 这样的状况 在同一个文件夹中 <!DOCTYPE html> <html> <head> <meta charset="u ...
- easyloader [easyui_1.4.2] 分析源码,妙手偶得之
用easyui很久了,但是很少去看源码. 有解决不了的问题就去百度... 今日发现,easyui的源码不难懂. 而且结合 easyloader 可以非常方便的逐个研究easyui的组件. 但是, ea ...
- 模板:多Case输入处理
利用cin实现 while(cin >> value) { } 调试时使用Ctrl + Z 输入文件结束符
- L011-oldboy-mysql-dba-lesson11
L011-oldboy-mysql-dba-lesson11 [root@ab01 ~]# mysqladmin -i 1 -r status #mysqladmin监控的命令 Uptime: ...
- 解决backbone url请求中参数有中文,存入数据库是乱码
最近项目用到了backbone 做前后端的分离方案,遇见了中文乱码问题,解决方案总结如下: 假设需要存一条课程记录到后台 model定义如下: var AddCourse= Backbone.Mo ...
- 解决flash挡住层的问题
让div在flash上面 设置flash为透明: 插件代码换成如下: <object type="application/x-shockwave-flash" data=&q ...
- 【转】给Winform的button等控件添加快捷键
ref: http://blog.sina.com.cn/s/blog_4cb9953f0100cy4z.html 第一种:Alt + *(按钮快捷键) 在大家给button.label.menuSt ...