就是二进制的斐波那契数...很容易看懂...
这题看有人用数位DP做,感觉其实没那个必要,仔细观察前十个就会发现,其实就是一个数字分解成几个斐波那契的和..有那个数字的是1,没有的是0...
至于为何不能相邻,因为相邻的两个斐波那契数就会合成为下一个...所以没有相邻的..
#include<bits/stdc++.h> using namespace std; #define ll long long ll f[60]; int main() { f[1]=1,f[2]=2; for(int i=3;i<=55;i++) f[i]=f[i-1]+f[i-2]; int t; scanf("%d",&t); for(int cas=1;cas<=t;cas++) { int n,i=55; scanf("%d",&n); printf("Case %d: ",cas); while(f[i]>n) i--; while(i>=1) { if(n>=f[i]) { n-=f[i]; printf("1"); } else printf("0"); i--; } printf("\n"); } return 0; }