这题主要解题思想是按照,先找4个人的有多少组,然后1和3来搭配,接着看2个人的有多少组,然后就是剩下的1个人和剩下的2个人组合,看一共可以多少组,然后剩下的1再组,总共加起来就是答案!
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
long min(long a,long b)
{
return (a>b)?b:a;
}
int main()
{
long sum;
long a[5]={0};
int n,m,i;
scanf("%d",&n);
sum=0;
for(i=0; i<n; i++)
{
scanf("%d",&m);
a[m]++;
}
sum=a[4];
a[1]-=min(a[1],a[3]);
sum+=a[3];
sum+=a[2]/2;
a[2]=a[2]%2;
if(a[2])
{
sum++;
a[1]-=2;
}
if(a[1]>0)
{
sum+=a[1]/4+((a[1]%4)?1:0);
}
printf("%d\n",sum);
return 0;
}