UVA 10400 Game Show Math
2014-04-17 18:28
351 查看
题目翻译的链接
http://luckycat.kshs.kh.edu.tw/homework/q10400.htm
这题RE无数次,后来发现用vis判重是的时候可能出现数组下标小于0,故判重加入32000
此题要vis判重否则TLE,同TLE N次
判重方法为当前应用数字与结果
下面代码
http://luckycat.kshs.kh.edu.tw/homework/q10400.htm
这题RE无数次,后来发现用vis判重是的时候可能出现数组下标小于0,故判重加入32000
此题要vis判重否则TLE,同TLE N次
判重方法为当前应用数字与结果
下面代码
#include <map> #include <set> #include <list> #include <cmath> #include<cctype> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cstdio> #include <string> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define PI 3.1415926535897932626 using namespace std; int gcd(int a, int b) { return a % b == 0 ? b : gcd(b, a % b); } //LRJ把这个题目放在第八章,感觉应该是回溯解决 int src[110]; int tot[110];//存储符号 char tt[4]={'+','-','*','/'}; int flag; int des,leap; int result; int vis[110][65000]; //int tot[110]; void slove(int cur) { if (flag)return ; if (cur==leap-1) { if (result==des) { flag=1; for (int i=0;i<leap-1;i++) { printf("%d",src[i]); printf("%c",tt[tot[i]]); } printf("%d=%d\n",src[leap-1],des); return ; } else return ; } int res=result; for (int i=0;i<4;i++) { if (flag) break; tot[cur]=i; if (i==0) { if (abs(src[cur+1]+result)>32000 || vis[cur+1][src[cur+1]+result+32000]) continue; vis[cur+1][src[cur+1]+result+32000]=1; result+=src[cur+1]; slove(cur+1); } else if (i==1) { if (abs(result-src[cur+1])>32000 || vis[cur+1][(result-src[cur+1])+32000]) continue; vis[cur+1][(result-src[cur+1])+32000]=1; result-=src[cur+1]; slove(cur+1); } else if (i==2) { if (abs(src[cur+1]*result)>32000 || vis[cur+1][src[cur+1]*result+32000]) continue; vis[cur+1][src[cur+1]*result+32000]=1; result*=src[cur+1]; slove(cur+1); } else { if (src[cur+1]==0 || vis[cur+1][result/src[cur+1]+32000] || abs(result/src[cur+1])>32000) continue; vis[cur+1][result/src[cur+1]+32000]=1; result/=src[cur+1]; slove(cur+1); } result=res; } } int main() { int N; scanf("%d\n",&N); while (N--) { scanf("%d",&leap); if (leap==0) break; for (int i=0;i<leap;i++) scanf("%d",&src[i]); scanf("%d",&des); flag=0; result=src[0]; memset(vis,0,sizeof(vis)); vis[0][result]=1; slove(0); if (!flag) printf("NO EXPRESSION\n"); } return 0; }
相关文章推荐
- uva10400 - Game Show Math(回溯+剪枝)
- uva 10400 Game Show Math(深搜 )
- uva10400 - Game Show Math
- UVA - 10400 Game Show Math(回溯)
- Uva 10400 —Game Show Math(深搜+剪枝)
- Game Show Math - UVa10400 搜索
- 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 游戏中的数学 dfs+判重
- UVA - 10400 Game Show Math
- [DFS&&剪枝]uva10400 Game Show Math
- UVA 10400 Game Show Math (dfs + 记忆化搜索)
- UVa 10400 - Game Show Math
- UVa 10400 - Game Show Math
- uva10400 - Game Show Math(回溯+剪枝)
- UVa 10400 - Game Show Math 游戏中的数学 dfs+判重
- UVA10400- Game Show Math
- UVA 10400 - Game Show Math