题目:纪念品分组
思路:贪心,每次都把最小的和最大的分为一组,如果超出限制,只能把大的单独分为一组。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 30000
int w,n;
int a[maxn+5]={0};
void readin(){
scanf("%d%d",&w,&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
}
int slv(){
int ans=0;
int p=1,q=n;
while(p<=q){
ans++;
if(a[p]+a[q]<=w){
p++,q--;
} else {
q--;
}
}
return ans;
}
int main(){
readin();
sort(a+1,a+n+1);
int ans=slv();
printf("%d",ans);
return 0;
}