CF1221A-2048 Game

这题其实是一个简单地贪心

由于$\sum_{i=0}^{n}2^i=2^{i+1}-1$,而本题要求合并相同的数。
因此,当要生成$2048$,可以得出:当所有特定数的和小于$2048$,一定不能合成。当所有特定数的和大于$2048$,则一定有相同的数。
因此,为得到$2048$,可以维护一个$sum$按如下的方法做:

  1. $a_i>2048$ 直接忽略。因为任何大于$2048$的相同两个数相加一定会大于2048,对答案没有贡献。
  2. $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");
    }
}