原题链接: https://www.luogu.org/problem/P1094

题目简述:

有NNN件纪念品,每个纪念品都有特定的价格,要求将他们分组,每组纪念品之和不得超过MMM,并且每组最多只能包含2件纪念品,请找出所有分组方案中最少的一个,并输出。

思路及代码:

读入后从小到大排序。

定义指针i j,并且i = 0,j = n-1,每次将a[i] ,a[j]相加,如果结果<m,就将他们分一组,否则让较大数单独一组,较小数继续寻找其他大数分组。

代码:

#include <bits/stdc++.h>
using namespace std;
int main() {
int a[1101011];
int i,j;
int n,w;
cin>>w>>n;
for(int i = 0;i<n;++i) {
cin>>a[i];
}
sort(a,a+n);
i = 0;
j = n-1;
int ans = 0;
i = 0;j = n-1;
while(i<=j) {
if(a[i]+a[j]<=w) {
ans++;
i++;
j--;
continue;
} else {
ans++;
j--;
continue;
}
}
cout<<ans<<endl;
}
05-23 09:51