B. Game of the Rows(贪心策略扫描)

第一遍扫描

4 4 , 4 2 2 , 大于4就用掉4人座,不用4人座就得用2个2人座,反而不灵活

第二遍扫描

2 2 大于2就用掉2人座

第三遍扫描

x 1 x 1 令x1为有x1个座位可以单独座人的

2 2 , x 1 + + 大于2就用一个四人座做2个人,此时x1++

x 1 + = x 2 + x 4 2 最后x1+=x2+x4*2

x 2 , x 4 4 ( ) 因为x2表示剩下的双人座,x4表示剩下的4人座(可以坐两个不同类的人)

第四遍扫描

x 1 看看x1是否能填充剩下的人

#include <bits/stdc++.h>
using namespace std;
inline int read(){
	int x;
	cin >> x;
	return x;//假装是快读 
}
int n,k,a[109];
int main()
{
	cin >> n >> k;
	for(int i=1;i<=k;i++)	cin >> a[i];
	int x4=n,x2=2*n,x1=0;
	for(int i=1;i<=k;i++)
	{
		int ci=min( x4,a[i]/4);//先用4人座
		x4-=ci,a[i]-=ci*4;	
	}
	for(int i=1;i<=k;i++)
	{
		int ci=min( x2,a[i]/2);
		x2-=ci,a[i]-=ci*2;
	}
	for(int i=1;i<=k;i++)
	{
		int ci=min( x4,a[i]/2);
		x4-=ci,x1+=ci,a[i]-=ci*2;
	}
	x1+=x2+x4*2;
	for(int i=1;i<=k;i++)	x1-=a[i];
	if( x1>=0 )	cout << "YES";
	else	cout << "NO";
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107893113