Sicily.1050. Numbers & Letters(DFS)
2012-12-27 16:27
197 查看
/*1050. Numbers & Letters(DFS) 大意:给出五个数字,通过他们其中的几个经过加减乘除操作。求出能够 达到的小于等于目标数的最大数 例如给出3 26 78 12 17 目标30 可以通过(78*3)-(12*17) = 30 思路:通过取两两数字进行操作。然后拿得到的结果再跟剩余的操作 例如 3 26 78 12 17 第一步:3+26 = 29,与剩下的78 12 17 29 构成新的数组进行下一次递归 用一个maxReached记录到达的最大数,当发现==targetNum时停止。 */ #include <iostream> #include <stdlib.h> using namespace std; int targetNum; int maxReached; bool ok = false; void dfs(int a[], int n) { if(ok) return; if(a[n-1] <= targetNum && a[n-1] > maxReached ){ maxReached = a[n-1]; if(maxReached == targetNum) { ok = true; return; } } if(n ==1) return; int next[5]; int temp,m,k; for(int i=0; i<n; i++) { for(int j=i+1; j<n; j++) { for(k=0, m=0; k<n; k++) if( k!=i && k!=j) //筛选掉已经用过的两个数 next[m++] = a[k]; next[m] = a[i] + a[j]; dfs(next, m+1); next[m] = a[i] - a[j]; dfs(next, m+1); next[m] = a[j] - a[i]; dfs(next, m+1); next[m] = a[i] * a[j]; dfs(next, m+1); if(a[i]!=0 && a[j]%a[i] == 0) { next[m] = a[j]/a[i]; dfs(next, m+1); } if(a[j]!=0 && a[i]%a[j] == 0) { next[m] = a[i]/a[j]; dfs(next, m+1); } } } } int main () { int n; cin >> n; int number[5]; for(int i=1; i<= n; i++) { ok = false; maxReached = -10000000; for(int k=0; k<5; k++) cin >> number[k]; cin >> targetNum; for(int k=0; k<5; k++) { if(number[k] <= targetNum && number[k] > maxReached) maxReached = number[k]; } dfs(number,5); cout << maxReached << endl; } system("pause"); return 0; }
相关文章推荐
- Sicily 1050 Numbers & Letters(DFS)
- 1050. Numbers & Letters (dfs)
- HDOJ 1312 red & black(dfs)
- POJ 1562 Oil Deposits【DFS】&&ZOJ 1709
- POJ_S1E03_DFS&BFS(3)
- 不要丧呀&&POJ 2362 && [剪枝]&&[dfs]
- bzoj 3242: [Noi2013]快餐店 dfs&递推
- POJ--2676&HDU--1421(数独,dfs)
- HDU 1241/UVa572 Oil Deposits(DFS&BFS)
- DFS深搜——Red and Black——A Knight's Journey
- CFgym:Sky Tax(DFS序 & 树)
- HDU 4274 Spy's Work 树形dfs
- 蓝桥杯 兰顿蚂蚁(dfs&&模拟)
- Sicily 1050. Numbers & Letters
- ACM学习历程—HDU1716 排列2(dfs && set容器)
- poj 2965 The Pilots Brothers' refrigerator(dfs 枚举 +打印路径)
- bzoj2115 Xor dfs&线性基
- poj 2965 The Pilots Brothers' refrigerator(dfs 枚举 +打印路径)
- CodeChef:Chef and Subsequences(思维 & dfs)
- POJ 2965 The Pilots Brothers' refrigerator(dfs+枚举 || 规律)