题目名字
纪念品分组(贪心)
题目链接
题意
给n个礼物,两个一组,使得每组的礼物价值差不多且不大于w,求最少能分几组
思路
- 先排序
- 最小的和最大的相加比,即第一小和第一大,如果相加大于了,就让第一小单独成一组,次数加一,然后接着判断和比较,次数加一;
坑点
- 抠字眼,题目说最多能放两个,但是没说必须放2个
- 还有就是数组的范围,巨巨巨巨巨大
算法一:贪心
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int w;
int n;
cin>>w>>n;
int a[n+5];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int i=0,j=n-1;
int ans=0;
int l=0,r=n;
while(l<=r){
if(a[l]+a[r]<=w&&l!=r){
ans++;//第一大的和第一小的相加
l++;
r--;
}
else{
ans++;//如果不可以单独成一组
r--;
}
}
cout<<endl<<ans;
return 0;
}