UVA 10400 - Game Show Math
来源:互联网 发布:idea java文件 蓝色j 编辑:程序博客网 时间:2024/06/08 03:46
看到题目,想到除了dfs枚举之外没有什么好方法了,但是最初我以为不需要判重,所以TLE,仔细想想,应该写一个vis[110][64000]的数组判重的,在cur时如果曾出现过sum的值,这个就不必再进行下去了。(这个题中的vis数组这一部分自己做的不好)。
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int target,p,num[110],ans,vis[110][640005];char ch[110];void dfs(int cur,int sum){ if(sum>32000||sum<-32000) return ; if(cur==p&&sum==target) { ans=1; return ; } if(cur>=p) return ; int nn=sum; nn/=num[cur]; ch[cur]='/'; if(nn>=-32000&&nn<=32000&&!vis[cur][nn]) { vis[cur][nn]=1; dfs(cur+1,nn); } if(ans==1) return ; sum-=num[cur]; ch[cur]='-'; if(sum>=-32000&&sum<=32000&&!vis[cur][sum]) { vis[cur][sum]=1; dfs(cur+1,sum); } if(ans==1) return ; sum+=num[cur]; sum+=num[cur]; ch[cur]='+'; if(sum>=-32000&&sum<=32000&&!vis[cur][sum]) { vis[cur][sum]=1; dfs(cur+1,sum); } if(ans==1) return ; sum-=num[cur]; sum*=num[cur]; ch[cur]='*'; if(sum>=-32000&&sum<=32000&&!vis[cur][sum]) { vis[cur][sum]=1; dfs(cur+1,sum); } if(ans==1) return ; sum/=num[cur];}int main(){ //freopen("in.txt","r",stdin); int cas; scanf("%d",&cas); while(cas--) { scanf("%d",&p); for(int i=0; i<p; i++) scanf("%d",&num[i]); scanf("%d",&target); ans=0; memset(vis,0,sizeof(vis)); dfs(1,num[0]); if(ans==0) cout<<"NO EXPRESSION\n"; else { cout<<num[0]; for(int i=1; i<p; i++) cout<<ch[i]<<num[i]; cout<<"="<<target<<endl; } } return 0;}
- UVa 10400 - Game Show Math
- uva 10400 - Game Show Math
- uva 10400 - Game Show Math
- UVa 10400 - Game Show Math
- UVA 10400 - Game Show Math
- uva 10400 Game Show Math
- uva 10400 Game Show Math
- UVA 10400 Game Show Math
- uva 10400 Game Show Math
- UVa 10400 - Game Show Math
- uva 10400 - Game Show Math
- UVA - 10400 Game Show Math
- UVa 10400 - Game Show Math
- UVA - 10400 Game Show Math
- uva 10400(Game Show Math) (DP)
- UVA - 10400 Game Show Math(回溯)
- UVA - 10400 Game Show Math DFS
- uva 10400 Game Show Math(深搜 )
- DBUtil工具类JdbcUtil
- cocos2d-x编译android版本时出现“/bin/sh: -c: line 0: syntax error near unexpected token”错误
- input2byte
- ZeroMQ的学习和研究
- <<C语言深度剖析>>学习笔记之二:关键字详解
- UVA 10400 - Game Show Math
- zlib libs
- Java的重载(Overload)与重写(Override)
- 使用DBUtil前的准备工作
- C语言中的数组与指针
- openssl简介-协议
- .NET代码生成工具
- 关于MVC3,从客户端(userName="<hr />")中检测到有潜在危险的 Request.Form 值的错误
- LISP 6.1 变量的基础