HDU_5167_Fibonacci
2016-10-23 16:26
246 查看
HDU 5167
题意:判断一个数(0≤n≤1,000,000,000)能否表示成菲波数的乘积(即该数的所有因子都是菲波数); 思路:先把0≤n≤1,000,000,000内的菲波数放到一个数组中,再在对该数的分解时dfs。
#include <iostream> #include <iomanip> #include <cstring> #include <cstdio> #include <cstdlib> #include <cmath> #include <set> #include <map> #include <list> #include <stack> #include <deque> #include <queue> #include <vector> #include <algorithm> #include <functional> #define PI acos(-1.0) #define eps 1e-10 #define INF 0x7fffffff #define debug(x) cout << "--------------> " << x << endl typedef long long LL; typedef unsigned long long ULL; using namespace std; long long fibo[50]; int mark[100001] = {0}; bool dfs(LL num, int k) { if (num < 100001 && mark[num] != 0) { return mark[num] - 1; } if (num == 1) { return 1; } for (int i = k; i > 2; --i) if (num % fibo[i] == 0 && dfs(num / fibo[i], i)) { if (num < 100001) { mark[num] = 2; } return 1; } if (num < 100001) { mark[num] = 1; } return 0; } int main() { fibo[0] = 0; fibo[1] = 1; for (int i = 2; i < 50; ++i) { fibo[i] = fibo[i - 1] + fibo[i - 2]; } int T; scanf("%d", &T); LL num; while (T--) { scanf("%lld", &num); if (num == 0 || num == 1) { printf("Yes\n"); } else { dfs(num, 45) ? printf("Yes\n") :printf("No\n"); } } return 0; }
相关文章推荐
- HDU - 5167 - Fibonacci
- HDU - 5166 - Missing number && 5167 - Fibonacci
- hdu 5167 Fibonacci 打表
- hdu 5167-Fibonacci
- hdu 5167 Fibonacci(预处理)
- HDU 5167 Fibonacci
- HDU 5167 Fibonacci 筛法+乱搞
- HDU 5167 Fibonacci (DFS + Fib数列)
- hdu 5167 Fibonacci(dfs)
- hdu 5167 Fibonacci
- 【DFS】hdu 5167 Fibonacci
- hdu-5167 Fibonacci
- hdu 5167 Fibonacci【思维】【递归】
- HDU 5167 Fibonacci(DFS暴力搜索)
- hdu 5167 Fibonacci(DFS)
- HDU 5167 Fibonacci——BestCoder Round #28(搜索+预处理)
- hdu 5167 Fibonacci(dfs)
- 【预处理】 HDU 5167 Fibonacci
- 【CUGBACM15级BC第28场 B】hdu 5167 Fibonacci
- hdu 5167 Fibonacci(DFS,剪枝,斐波那契)