题解:
先从小到大排个序
然后最小与最大两两组合讨论与w的关系
满足小于等于w,则两个纪念品组成一队
否则,更大的那个纪念品自己打包成一队
代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int w;
int n;
cin >> w >> n;
vector<int> price;
for (int i = 0; i < n; i++) {
int p;
cin >> p;
price.push_back(p);
}
sort(price.begin(), price.end());
int i = 0;
int j = n - 1;
int num = 0;
while (i <= j) {
if (price[i] + price[j] <= w) {
i++;
j--;
num++;
}
else {
j--;
num++;
}
}
cout << num << endl;
return 0;
}