贪婪算法、递归计算、动态规划背包问题

来源:互联网 发布:淘宝网买短款真丝旗袍 编辑:程序博客网 时间:2024/06/12 01:42

   //贪婪算法计算背包问题        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];        }
0 0
原创粉丝点击