四个人的座位拆成双人和单人,先排完四人的,再排二人的,再排单人的。我做的时候直接就把某个group排完,wa到死。看了下别人的贪心策略,写了下就A了
#include <bits/stdc++.h>
using namespace std;
int n,k;
int seat[3];
int num[110];
int main()
{
ios::sync_with_stdio(false);
cin >> n >> k;
seat[0] = n;
seat[1] = 2*n;
seat[2] = 0;
for(int i = 0; i < k; ++i)
cin >> num[i];
int cnt;
for(int i = 0; i < 3; ++i)
{
if(i == 0) cnt = 4;
else if(i == 1)
{
cnt = 2;
if(seat[i-1] > 0)
{
seat[i] += seat[i-1];
seat[i+1] += seat[i-1];
seat[i-1] = 0;
}
}
else
{
cnt = 1;
if(seat[i-1] > 0)
seat[i] += seat[i-1];
}
for(int j = 0; j < k; ++j)
{
if(seat[i] > 0)
{
if(seat[i] >= num[j]/cnt)
{
seat[i] -= num[j]/cnt;
num[j] %= cnt;
}
else
{
num[j] -= seat[i]*cnt;
seat[i] = 0;
}
}
}
}
bool flag = false;
for(int i = 0; i < k; ++i)
if(num[i] > 0)
{
flag = true;
break;
}
if(flag)
cout << "NO" <<endl;
else
cout << "YES" << endl;
return 0;
}