class Program
{
static void Main(string[] args)
int[] weights = { 2, 4, 6, 5, 4 };
int[] values = { 9, 3, 7, 4, 6 };
PacketItem[] PacketItems = new PacketItem[weights.Length];
for (int i = 0; i < weights.Length; i++)
{
PacketItems[i] = new PacketItem(weights[i], values[i]);
}
var result = Get01Packet(PacketItems, 10);
Console.ReadKey();
}
public class PacketItem
{
public int Weight { get; set; }
public int Value { get; set; }
public PacketItem(int weight, int value)
{
this.Weight = weight;
this.Value = value;
}
}
public static int Get01Packet(PacketItem[] PacketItems, int bagSize)
{
PacketItem item;
int[,] bagMatri = new int[PacketItems.Length + 1, bagSize + 1];
for (int i = 1; i < bagSize + 1; i++)
{
for (int j = 1; j < PacketItems.Length+1; j++)
{
item = PacketItems[j-1];
if (item.Weight > i)
{
if (j-1 == 0)
{
bagMatri[j, i] = 0;
}
else
{
bagMatri[j, i] = bagMatri[j - 1, i];
}
}
else
{
int itemInBag = 0;
if (j-1 == 0)
{
bagMatri[j, i] = item.Value;
continue;
}
else
{
itemInBag = bagMatri[j-1, i - item.Weight] + item.Value;
}
if (bagMatri[j - 1, i] > itemInBag)
{
bagMatri[j, i] = bagMatri[j - 1, i];
}
else
{
bagMatri[j, i] = itemInBag;
}
}
}
}
int result = 0;
for (int i = 1; i < bagSize + 1; i++)//
{
for (int j = 1; j < PacketItems.Length + 1; j++)
{
if (bagMatri[j, i]>result)
{
result = bagMatri[j, i];
}
}
}
return result;
}
}
運行結果 :18