Knapsack problem/Continuous: Difference between revisions

Line 384:
 
(print (rob items 15))
 
=={{header|C sharp|C#}}==
<lang csharp>
using System;
using System.Collections.Generic;
using System.Linq;
namespace knapsack_continious {
class Item {
public Item(string name, double weight, double price) {
Name = name;
Weight = weight;
Price = price;
}
public string Name { get; set; }
public double Weight { get; set; }
public double Price { get; set; }
public double PerKg { get { return Price / Weight; } }
}
class Program {
static void Main(string[] args) {
var items = new List<Item>() {
new Item("beef" , 3.8, 36),
new Item("pork" , 5.4, 43),
new Item("ham" , 3.6, 90),
new Item("greaves", 2.4, 45),
new Item("flitch" , 4.0, 30),
new Item("brawn" , 2.5, 56),
new Item("welt" , 3.7, 67),
new Item("salami" , 3.0, 95),
new Item("sausage", 5.9, 98)
};
double knapsack = 15.0, total = 0.0;
foreach (var item in items.OrderByDescending(x => x.PerKg)) {
if (knapsack >= item.Weight) {
Console.WriteLine("take all {0}", item.Name);
total += item.Price;
}
else {
Console.WriteLine("take {0} kg of {1}", knapsack, item.Name);
total += (item.PerKg * knapsack);
}
knapsack -= item.Weight;
if (knapsack <= 0) break;
}
Console.WriteLine("Total take {0:C2}", total);
}
}
}
</lang>
Output<pre>
take all salami
take all ham
take all brawn
take all greaves
take 3.5 kg of welt
Total take $349.38
</pre>