• 主页

# C#算法.01背包问题.这个代码要怎么改?

MAX-sp 2014-01-27 03:54:35
`````` 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);
}
}``````

...全文
329 点赞 收藏 15

15 条回复
angel6709 2015年10月27日

angel6709 2015年10月27日
``````
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)
{
lastValue = values[len ][w + 1 - items[len].weight];
w = w + 1 - items[len].weight;
break;
}
else
{
len--;
}
}
}
else
{
w--;
}
}

}
}
}

``````

wangderong83899 2014年03月25日

wangderong83899 2014年03月25日

[quote=引用 4 楼 sp1234 的回复:] 有的人学习的目的是为了让自己真的懂，有的人学习的目的是为了让别人以为自己可能懂。 前者往往比较直率，后者比较奸诈。呵呵。

MAX-sp 2014年02月17日

MAX-sp 2014年02月07日

MAX-sp 2014年01月30日

MAX-sp 2014年01月27日
1楼不是答案啊.我晕

MAX-sp 2014年01月27日

int[] v = {10, 40, 30 ,50, 35 ,40 ,30}; // 每件物品的价值 int[] w = { 35, 30, 40 ,50 ,40, 10 ,25 }; // 每件物品的重量 Console.WriteLine("xxxxxmaximum value is: {0}", fetch(v, w, 150)); 自己带进去不就完了吗?

md5e 2014年01月27日
int[] v = {10, 40, 30 ,50, 35 ,40 ,30}; // 每件物品的价值 int[] w = { 35, 30, 40 ,50 ,40, 10 ,25 }; // 每件物品的重量 Console.WriteLine("xxxxxmaximum value is: {0}", fetch(v, w, 150)); 自己带进去不就完了吗?

C#

8.4w+

64.0w+

.NET技术 C#