今天做题感觉好啊,第一题就秒杀,哈哈哈
题解:
首先将纪念品按价格从小到大排序,然后用2个指针i,j分别指向头和尾,直到i>j时才退出。因为题目说了每组最多只能有2个纪念品,且纪念品价格之和不能超过w,那么如果当前状态下的a[i] + a[j] > w,那么a[j]只能独自成为一组了,因为此时的i只要向后移动,就一定是非递减的。
using namespace std;
#include<bits/stdc++.h>
int main(){
int w,n;
int a[30005];
cin>>w;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int sum=0;
int i=0,j=n-1;
while(i <= j)
{
if(a[i]+a[j] <=w )
{
sum++;
i++;
j--;
}
else
{
sum++;
j--;
}
}
cout<<sum;
return 0;
}