n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long int fun(vector<long long int> &input, int n, long long int m)
{
sort(input.begin(), input.end());
long long int result = 0;
while (input.size() > 1)
{
long long int sum = input[input.size()-1];
int left = 0;
int right = input.size() - 2;
int index = -1;
while (left < right-1)
{
int mid = left + (right-left)/2;
long long int temp = input[mid] + sum;
if (temp == m)
{
index = mid;
break;
}
else if (temp < m)
{
left = mid;
}
else
{
right = mid;
}
}
if (index == -1)
{
if (input[right] + sum <= m)
{
index = right;
}
else if (input[left] + sum <= m)
{
index = left;
}
}
input.pop_back();
if (index != -1)
{
input.erase(input.begin() + index);
}
result++;
}
if (input.size() > 0)
{
result++;
}
return result;
}
int main()
{
int n;
long long int m;
scanf("%d %lld", &n, &m);
vector<long long int> input;
long long int a;
for (int i = 0; i < n; i++)
{
scanf("%lld", &a);
input.push_back(a);
}
cout << fun(input, n, m) << endl;
return 0;
}