请用C# 写一个背包算法,要求有详细注释
时间: 2024-01-14 11:04:43 浏览: 70
以下是基于动态规划思想的背包算法的 C# 实现,注释详尽:
```csharp
using System;
class Knapsack
{
// 商品数量
static int N = 5;
// 背包容量
static int W = 10;
// 商品价值
static int[] value = { 6, 3, 5, 4, 6 };
// 商品重量
static int[] weight = { 2, 2, 6, 5, 4 };
static void Main()
{
// dp[i][j] 表示:在前 i 个商品中,容量为 j 的背包所能装下物品的最大价值
int[,] dp = new int[N + 1, W + 1];
// 初始化边界值
for (int i = 0; i <= N; i++)
dp[i, 0] = 0;
for (int j = 0; j <= W; j++)
dp[0, j] = 0;
// 动态规划求解
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= W; j++)
{
// 若当前商品重量大于背包容量,则无法装入,价值为上一个商品的价值
if (weight[i - 1] > j)
dp[i, j] = dp[i - 1, j];
// 否则,比较不装入当前商品和装入当前商品的最大价值
else
dp[i, j] = Math.Max(dp[i - 1, j], dp[i - 1, j - weight[i - 1]] + value[i - 1]);
}
}
// 输出最大价值
Console.WriteLine("背包能装下的最大价值为:" + dp[N, W]);
}
}
```
以上代码实现了一个简单的背包算法,可以根据自己的需求进行修改。
阅读全文