题目意思
需要将一些物品打包装箱,一个箱子最多装两个物品(可以一个也可以两个)
求将这些物品全部打包,最少要多少个箱子
题解思路
首先将箱子从小到大排序,尝试在一个箱子里装此刻剩余的最大的和最小的两个物品
- 如果能装下,箱子数+1
- 否则的话,只将最大的物品装到箱子中
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN=1e5+5;
#define ll long long
int len[MAXN];
int main(void)
{
int n,l;
scanf("%d%d",&n,&l) ;
for(int i=0;i<n;i++)
{
cin>>len[i];
}
sort(len,len+n);
int count=0;
for(int left=0,right=n-1;left<=right;)//如果同时能装下此时剩余最大和最小的,则花费一个箱子装这两个
// 如果此时剩下的最大和最小的两个物品一个箱子装不下,那么用一个箱子转此时最大的物品
{
if(len[left]+len[right]<=l)
{
left++;
right--;
}
else{
right--;
}
count++;
}
cout<<count<<endl;
return 0;
}