Given n items of different weights and bins each of capacity c, assign each item to a bin such that number of total used bins is minimized. It may be assumed that all items have weights smaller than bin capacity.
#include <iostream>
#include <vector>
using namespace std;
int firstFit(vector<int>& weights, int Capacity) {
int nbins = 0;
vector<int> bin_rem(weights.size(), Capacity);
for (auto weight : weights) {
int j;
for (j = 0; j < nbins; j++) {
if (bin_rem[j] >= weight) {
bin_rem[j] -= weight;
break;
}
}
if (j == nbins) {
bin_rem[nbins] = Capacity - weight;
nbins++;
}
}
return nbins;
}
int firstFitDec(vector<int>& weights, int Capacity) {
sort(weights.begin(), weights.end(), std::greater<int>());
return firstFit(weights, Capacity);
}
int main() {
vector<int> weights = {2, 5, 4, 7, 1, 3, 8};
int Capacity = 10;
cout << firstFitDec(weights, Capacity) << endl;
}
原文地址:
https://www.geeksforgeeks.org/bin-packing-problem-minimize-number-of-used-bins/