这题其实是一个简单地贪心
由于$\sum_{i=0}^{n}2^i=2^{i+1}-1$,而本题要求合并相同的数。
因此,当要生成$2048$,可以得出:当所有特定数的和小于$2048$,一定不能合成。当所有特定数的和大于$2048$,则一定有相同的数。
因此,为得到$2048$,可以维护一个$sum$按如下的方法做:
- $a_i>2048$ 直接忽略。因为任何大于$2048$的相同两个数相加一定会大于2048,对答案没有贡献。
- $a_i \le 2048$ $sum+=a_i$。
随后看是否$sum \ge 2048$,大于等于输出Yes
,否则输出No
。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int sum=0,yx=0,f=0;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if(x>2048) continue;
sum+=x;
}
if(sum>=2048) puts("YES");
else puts("NO");
}
}