当前位置: 代码迷 >> 综合 >> HDU - 5167 Fibonacci DFS
  详细解决方案

HDU - 5167 Fibonacci DFS

热度:45   发布时间:2023-11-25 14:31:29.0

Fibonacci

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2960    Accepted Submission(s): 780


Problem Description
Following is the recursive definition of Fibonacci sequence:
Fi=???01Fi?1+Fi?2i = 0i = 1i > 1

Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.

Input
There is a number T shows there are T test cases below. ( T100,000)
For each test case , the first line contains a integers n , which means the number need to be checked.
0n1,000,000,000

Output
For each case output "Yes" or "No".

Sample Input
   
3 4 17 233

Sample Output
   
Yes No Yes

AC代码:

#include<cstdio>int F[50];
void FF(){F[1]=0;F[1]=1;for(int i=2;i<=45;i++){F[i]=F[i-1]+F[i-2];}
}int dfs(int n,int x){if(n<=2){return 1;}for(int i=x;i>=3;i--){if(n%F[i]==0){if(dfs(n/F[i],i)){return 1;}}}return 0;
}
int main(){int t;scanf("%d",&t);while(t--){FF();int n;scanf("%d",&n);if(dfs(n,45)==1){printf("Yes\n");}else{printf("No\n");}}return 0;
}