主要思想 :构造
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 50;
int p[N];
int get(int x)
{
if (p[x] != -1) return p[x];
else
{
p[x] = get(x - 1) + get(x - 2);
return p[x];
}
}
int main()
{
memset(p,-1,sizeof p);
p[0] = p[1] = 1;
for (int i = 2;i < N;i++) p[i] = get(i);
int T;
cin >> T;
while (T--)
{
int t = 1;
int n,x,y;
cin >> n >> x >> y;
for (int i = n;i >= 1;i--)
{
if (y > p[i]) y -= p[i];
else if (y > p[i - 1])
{
t = 0;
break;
}
swap(x,y);
}
if (t) puts("YES");
else puts("NO");
}
return 0;
}