110,571
社区成员
发帖
与我相关
我的任务
分享
public class test
{
public static void Main()
{
int[] v = { 1, 2,3}; // 每件物品的价值
int[] w = { 1,2, 3}; // 每件物品的重量
Console.WriteLine("xxxxxmaximum value is: {0}", fetch(v, w, 5));
}
private static int fetch(int[] v, int[] w, int j) //初始时i=物品数量, j=背包总容量
{
int i = w.Count()-1;
return fetch(v, w, i, j);
}
static int fetch(int[] v, int[] w, int i, int j) //初始时i=物品数量, j=背包总容量
{
if (i == -1)
return 0;
if (j >= w[i])
{ // 背包剩余空间可以放下物品i
int v1 = fetch(v, w, i - 1, j - w[i]) + v[i]; //第i件物品放入所能得到的价值
int v2 = fetch(v, w, i - 1, j); //第i件物品不放所能得到的价值
if (v1 > v2 )
{
return v1;
}
else
{
return v2;
}
}
else
return fetch(v, w, i - 1, j);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
class Item
{
public int index;
public string name;
public int weight;
public int value;
}
public static void Main()
{
List<Item> items = new List<Item>()
{
new Item{ index=1, name="a", value= 4, weight=4},
new Item{ index=2, name="b", value= 4, weight=3},
new Item{ index=3, name="c", value= 4, weight=6},
new Item{ index=4, name="d", value= 4, weight=9},
new Item{ index=5, name="e", value= 4, weight=1}
};
int maxWeight = 15;
int[][] values = new int[items.Count + 1][];
for (int i = 0; i < values.Length; i++)
{
values[i] = new int[maxWeight + 1];
}
for (int i = 1; i <= items.Count; i++)
{
for (int j = 1; j <= maxWeight; j++)
{
if (j >= items[i - 1].weight)
{
values[i][j] = Math.Max(values[i - 1][j - items[i - 1].weight] + items[i - 1].value, values[i - 1][j]);
}
else
{
values[i][j] = values[i - 1][j];
}
}
}
int w = maxWeight;
int len = items.Count;
int lastValue = values[items.Count][maxWeight];
List<Item> acceptedItems = new List<Item>();
while (w > 0)
{
if (values[len][w] != lastValue)
{
while (len >= 0)
{
if (values[len][w + 1] != lastValue)
{
acceptedItems.Add(items[len]);
lastValue = values[len ][w + 1 - items[len].weight];
w = w + 1 - items[len].weight;
break;
}
else
{
len--;
}
}
}
else
{
w--;
}
}
}
}
}