题目大意
把n个数分成几组,每组的总和不超过w,求最少可分多少组。
思路
先把数进行排序,再用大数配对小数。
value
目前组的总价值g
最少组数
#include <bits/stdc++.h>
using namespace std;
int souv[100001];
int main() {
int Max, n;
cin >> Max >> n;
for (int i = 1; i <= n; i++) cin >> souv[i];
sort(souv + 1, souv + n + 1);
int g = 0, value = 0, k = 1;
for (int i = n; i >= k; i--) {
if (value + souv[i] <= Max)//能多放大的就多放
value += souv[i];
else {
for (; k <= i; k++)
if (value + souv[k] <= Max)//如果目前最小值可以加入当前组
value += souv[i];
else
break;
value = 0;//下一组
g++, i++;//组数增加,(因为souv[i]没有判断过,所以要加回去)
}
}
if (value)
g++;
cout << g;
}