zoukankan      html  css  js  c++  java
  • 贪婪算法、递归计算、动态规划背包问题

            //贪婪算法计算背包问题
            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];
            }
    好好学习,天天向上。
  • 相关阅读:
    七月二十六学习报告
    学习笔记167—circos 可视化手册【fonts 篇】
    学习笔记166—Circos增加区块属性【highlight 属性】
    学习笔记165—Circos入门总结【for Brain Network】
    iOS 逆向工程(十三)之加壳与脱壳/砸壳
    iOS 逆向工程(十二)之class-dump工具使用
    iOS 逆向工程(十一)之Reveal工具使用
    iOS 逆向工程(十)之Cytript通用语法
    iOS 逆向工程(九)之解决iOS终端的中文乱码
    iOS 逆向工程(八)之sh脚本文件处理重复性工作
  • 原文地址:https://www.cnblogs.com/Zhengxue/p/6141484.html
Copyright © 2011-2022 走看看