namespace GreedAlgorithm1
{
class Program
{
static void Main(string[] args)
{
float[,] array = { { 3, 2, 7, 4, 1 }, { 1, 2, 3, 4, 5 }, { 0, 0, 0, 0, 0 } };
float max=7;
BackPack backpack = new BackPack(array, max);
backpack.ratio();
backpack.quickSort(array, 0, 4);
Console.WriteLine(backpack.ratioPriority());
}
}
class BackPack
{
private float[,] array;
private float maxWeight;
public BackPack(float[,] _array, float _maxWeight)
{
this.array = _array;
maxWeight = _maxWeight;
}
public int partition(float[,] array, int start, int end)
{
while (start < end)
{
while ((start < end) && (array[array.GetUpperBound(0), start] > array[array.GetUpperBound(0), end]))
{
end--;
}
if (start < end)
{
float temp0 = array[0, start];
float temp1 = array[1, start];
float temp2 = array[2, start];
array[0, start] = array[0, end];
array[1, start] = array[1, end];
array[2, start] = array[2, end];
array[0, end] = temp0;
array[1, end] = temp1;
array[2, end] = temp2;
start++;
}
while ((start < end) && (array[array.GetUpperBound(0), start] > array[array.GetUpperBound(0), end]))
{
start++;
}
if (start < end)
{
float temp0 = array[0, start];
float temp1 = array[1, start];
float temp2 = array[2, start];
array[0, start] = array[0, end];
array[1, start] = array[1, end];
array[2, start] = array[2, end];
array[0, end] = temp0;
array[1, end] = temp1;
array[2, end] = temp2;
end--;
}
}
return start;
}
public void quickSort(float[,] array, int start, int end)
{
if (start < end)
{
int pivot = partition(array, start, end);
quickSort(array, start, pivot - 1);
quickSort(array, pivot + 1, end);
}
}
public void ratio()
{
for (int i = 0; i <= array.GetUpperBound(1); i++)
{
array[array.GetUpperBound(0), i] = array[0, i] / array[1, i];
}
}
public float ratioPriority()
{
float sumWeight = 0;
float sumProfit = 0;
for (int i = 0; i <= array.GetUpperBound(1); i++)
{
if (sumWeight + array[1, i] > maxWeight)
{
continue;
}
else
{
sumWeight += array[1, i];
sumProfit += array[0, i];
}
}
return sumProfit;
}
}
}
贪心算法的补充
最新推荐文章于 2024-08-19 15:22:05 发布