After the lessons n groups of schoolchildren went outside and decided to visit Polycarpus to celebrate his birthday. We know that thei-th group consists of si friends (1 ≤ si ≤ 4), and they want to go to Polycarpus together. They decided to get there by taxi. Each car can carry at most four passengers. What minimum number of cars will the children need if all members of each group should ride in the same taxi (but one taxi can take more than one group)?
The first line contains integer n (1 ≤ n ≤ 105) — the number of groups of schoolchildren. The second line contains a sequence of integerss1, s2, ..., sn (1 ≤ si ≤ 4). The integers are separated by a space, si is the number of children in thei-th group.
Print the single number — the minimum number of taxis necessary to drive all children to Polycarpus.
5 1 2 4 3 3
4
8 2 3 4 4 2 1 3 1
5应该比较容易懂。。。情况关键在于,1个人的团体。它是“填缝者”。首先4人3人肯定都只能放一个taxi里面。2人的可以自己放2个,1个人与3个人的多少关系就是分类关键了。#include <iostream> using namespace std; int main(){ int n; int x; cin>>n; int counter=0; int num1=0,num2=0,num3=0; while(n--){ cin>>x; if (x==1) { num1++; } if (x==2) { num2++; } if (x==3) { num3++; } if (x==4) { counter++; } } if (num3>=num1) { counter+=num3; counter+=((num2+1)/2); } if (num3<num1) { counter+=num3; num1=num1-num3; counter+=(num2/2); num2=num2%2; if (num2==1) { counter+=(num1+1)/4+1; } if (num2==0) { if (num1>0) { counter+=(num1-1)/4+1; } if (num1==0) { counter=counter+0; } } } cout<<counter<<endl; return 0; }