//贪婪算法计算背包问题
public static double ksack(double[] values, double[] weights, int capacity)
{
double load = 0;
int i = 0;
double w = 0;
while (load<capacity && i<values.Length)
{
if (weights[i] <= (capacity-load))
{
w += values[i];
load += weights[i];
}
else
{
double r = (capacity - load) / weights[i];
w += r * values[i];
load += weights[i];
}
i++;
}
return w;
}
//递归计算背包问题
public static int max(int a, int b)
{
return a > b ? a : b;
}
public static int knapsack(int cappcity, int[] size, int[] value, int n)
{
if (n == 0 || cappcity == 0)
{
return 0;
}
if (size[n - 1] > cappcity)
{
return knapsack(cappcity, size, value, n - 1);
}
else
{
return max(value[n - 1] + knapsack(cappcity - size[n - 1], size, value, n - 1), knapsack(cappcity, size, value, n - 1));
}
}
//动态规划背包问题
public static long dKnapsack(int cappcity, int[] size, int[] value, int n)
{
int[,] K = new int[n, cappcity + 1];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < cappcity; j++)
{
K[i, j] = 0;
}
}
for (int i = 0; i < n; i++)
{
for (int w = 0; w < cappcity; w++)
{
if (i == 0 || w == 0)
{
K[i,w] = 0;
}
else if (size[i - 1] <= w)
{
K[i,w] = max(value[i - 1] + K[i - 1,w-size[i-1]], K[i - 1,w]);
}
else
{
K[i,w] = K[i - 1,w];
}
}
}
return K[n,cappcity];
}