房间里有n个物体,每个物体i都有一个重量wi。小明有许多个承重为C的箱子。但是由于一些缘故,每个箱子最多只能装2个物体。现在小明想要用最少的数量装完这些物品。你能知道他最少能用几个箱子就能装完吗?
all :wi<=C<=1000
50分:n<=1000;
100分:n<=100000;
输入
第一行两个正整数n,C。分别表示物体的数量,和箱子的承重
第二行n个正整数$w_i$,代表物体i的重量
输出
一个正整数表示所用的箱子数
样例输入
5 9
8 5 2 7 7
样例输出
4
考虑贪心:
按重量从小到大考虑每个物体,再选择剩下的物体中能够与当前 物体一起装上且重量最大的物
体,也就是"一轻一重"的去选择。
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int q[N];
int res;//res定义为全局变量
int main()
{
int n, C;
cin >> n >> C;
for (int i = 1; i <= n; i++)
{
cin >> q[i];
}
sort(q, q + n + 1);
int l = 1, r = n;
while (l <= r)
{
if (q[r] + q[l] <= C)
{
r--;
l++;
res++;
}
else
{
r--;
res++;
}
}
cout << res;
}