思路:先放4个的,然后再放2个的,最后再放1个的。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset((a),(b),sizeof(a)) int a[105]; int main() { int n,k; cin>>n>>k; int c2=n*2; int c4=n; for(int i=1;i<=k;i++)cin>>a[i]; for(int i=1;i<=k;i++) { int c=min(c4,a[i]/4); c4-=c; a[i]-=c*4; } c2+=c4;//剩下的4个连在一起的也可以放2个的 for(int i=1;i<=k;i++) { int c=min(c2,a[i]/2); c2-=c; a[i]-=c*2; } int t=c2+c4;//原来的4个连在一起的放二个的时候只放了一半,而且放了一半也可能没放满 for(int i=1;i<=k;i++) { t-=a[i]; } if(t<0)cout<<"NO"<<endl; else cout<<"YES"<<endl; return 0; }