贪心 emmmm
http://codeforces.com/contest/158/problem/B
题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以坐四个人,并且一组里的人必须坐一辆车,可以 4,3+1,2+2,3,2+1+1......,求解最小的出租车数。
贪心,显示找4的个数,再找3的个数,把能带走的1尽量带走,最后讨论2 和 剩下的 1 的情况
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int n, x;
int a = 0, b = 0, c = 0, d = 0, ans = 0;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> x;
if(x == 1)
a++;
else if(x == 2)
b++;
else if(x == 3)
c++;
else if(x == 4)
d++;
}
ans += d;
if(c < a)//3 < 1
{
ans += c;
a -= c;
if(b % 2 == 0)
{
ans += (b/2);
ans += (a/4);
if(a%4 != 0)
{
ans += 1;
}
}
else
{
ans += ((b-1)/2);
if(a >= 2)
{
ans += 1;
a -= 2;
if(a > 0)
{
ans += (a/4);
if(a%4!=0)
{
ans += 1;
}
}
}
else
{
ans += 1;
}
}
}
else // 3>1
{
ans += c;
if(b%2==0)
{
ans += (b/2);
}
else
{
ans += (b/2 + 1);
}
}
cout << ans << endl;
return 0;
}
本文详细分析了Codeforces竞赛中的158B-Taxi问题,重点探讨了如何利用贪心策略解决旅客分组乘坐出租车的最优化问题。通过优先安排四人组,再考虑三人组和单人组合,逐步减少所需出租车的数量,最终确保所有旅客都能有效乘车。
167

被折叠的 条评论
为什么被折叠?



