题意
操作集合, 如果最后能凑出2048, 输出YES, 否则NO
题解
先是没理解题意当成是2048倍数就开始做题, 考虑的也复杂了
哎, 比赛时候心态炸了了
代码
#include <bits/stdc++.h>
using namespace std;
#define rg register
#define sc scanf
#define pf printf
int main ( ) { // freopen( "F:\\in\\.txt" , "r" , stdin );
rg int T;
sc( "%d", &T );
while ( T-- ) {
rg int n;
sc( "%d", &n );
rg int tmp;
rg int sum = 0;
for ( rg int i = 0; i < n; ++i ) {
sc( "%d", &tmp );
if ( tmp<=2048 ) sum += tmp;
}
sum>=2048? puts( "YES" ) : puts( "NO" );
}
return 0 ;
}
// #include <bits/stdc++.h>
// using namespace std;
// #define rg register
// #define sc scanf
// #define pf printf
// int main ( ) { // freopen( "F:\\in\\.txt" , "r" , stdin );
// int tmp;
// map<int,int> mp;
// rg int T;
// sc( "%d", &T );
// while ( T-- ) {
// mp.clear();
// rg int n;
// sc( "%d", &n );
// for ( rg int i = 0; i < n; ++i ) {
// sc( "%d", &tmp );
// mp[tmp]++;
// }
// rg bool jdg = false;
// for ( map<int,int>::iterator it = mp.begin(); it != mp.end(); ++it ) {
// if ( mp[2048] ) {
// jdg = true;
// break;
// }
// if ( it->second==1 || it->second==0) continue;
// if ( it->first > 2048 ) continue;
// if ( (it->second)*(it->first) >= 2048 ) {
// int shengYu = (it->second)*(it->first)%2048;
// int tot = (it->second)*(it->first)/2048;
// mp[2048] += tot;
// mp[it->first] = shengYu;
// } else {
// }
// }
// // for ( map<int,int>::iterator it = mp.begin(); it != mp.end(); ++it ) {
// // if ( it->second==0) continue;
// // if ( it->second== )
// // }
// jdg == true ? puts("YES") : puts("NO");
// }
// return 0 ;
// }