[GeeksForGeeks] Bin Packing Problem (Minimize number of used Bins)
阿新 • • 發佈:2018-12-10
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;
}