using System.Collections.Generic;
private static int CAPACITY = 3000;
public static void Main()
var input = new List<int>{300,400,500,2300,2400,2500};
var d = distributeItems(input);
Console.WriteLine("need {0} bins", d.Count);
Console.WriteLine("Number of elements: {0}, remaining capacity: {1}", b.items.Count, b.capacityLeft);
public int capacityLeft {get; set;}
public List<int> items { get; set;}
static List<Bin> distributeItems(List<int> items) {
var result = new List<Bin>();
var sortedItems = items.OrderByDescending(x => x);
foreach (var x in sortedItems) {
int index = result.Count;
for (int i = 0; i < result.Count; i++) {
if (result[i].capacityLeft >= x && result[i].capacityLeft < min) {
min = result[i].capacityLeft;
if (index == result.Count) {
result.Add(new Bin{capacityLeft = CAPACITY, items = new List<int>()});
result[index].capacityLeft -= x;
result[index].items.Add(x);