纪念品分组:
一句话题解:
排序并分别从头和尾开始循环,若两数相加小于限定数,则ans++,并l++r- -,若大于限定数,则大数单独做一组,ans++,并r- -
代码:
#include<bits/stdc++.h>
using namespace std;
int n,w,p[30001];
bool cmp(int a,int b){
return a>b;
}
int sigma(int l,int r){
int ans=0;
while(l<=r){
if(p[l]+p[r]<=w){
l++;
r--;
}
else{
l++;
}
ans++;
//printf("%d %d 1\n",l,r);
}
return ans;
}
int main(){
scanf("%d%d",&w,&n);
for(int i=1;i<=n;i++){
scanf("%d",&p[i]);
}
sort(p+1,p+n+1,cmp);
printf("%d",sigma(1,n));
}