C# 背包算法
C#中的背包算法可以通过以下代码实现:
public class Item
{
public int Value { get; set; }
public int Weight { get; set; }
}
public static int Knapsack(Item[] items, int W)
{
int n = items.Length;
int[,] dp = new int[n + 1, W + 1];
for (int i = 1; i <= n; i++)
{
Item item = items[i - 1];
for (int j = 1; j <= W; j++)
{
if (item.Weight > j)
{
dp[i, j] = dp[i - 1, j];
}
else
{
dp[i, j] = Math.Max(dp[i - 1, j], dp[i - 1, j - item.Weight] + item.Value);
}
}
}
return dp[n, W];
}
在此代码中,我们定义了一个Item类来表示每个物品的价值和重量。然后,我们定义了一个Knapsack函数来计算最大价值。
函数采用两个参数:items表示物品数组,W表示背包的最大容量。函数返回最大价值。
我们使用一个二维数组dp来存储计算结果。dp[i, j]表示前i个物品在容量为j的背包中的最大价值。
我们使用两个嵌套循环来计算dp数组。外循环遍历每个物品,内循环遍历每个容量。对于每个物品和容量,我们计算是否将该物品放入背包中。如果重量超过了容量,则不放入背包中,否则我们选择放入背包或不放入背包,取最大价值。
最后,函数返回dp[n, W],即前n个物品在容量为W的背包中的最大价值
原文地址: https://www.cveoy.top/t/topic/ebPC 著作权归作者所有。请勿转载和采集!