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];
            }
    好好学习,天天向上。
  • 相关阅读:
    SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
    备份还原工具—ghost
    太多的if,太多的痛苦
    C#中使用GUID
    WinForm开发中,将Excel文件导入到DataGridView中时,获取Excel中所有表格的名称。
    使用ASP调用C#写的COM+组件
    COM+ and the .NET Framework 虽是英文但比较全面
    在C#中使用COM+实现事务控制
    COM+ and the .NET Framework
    管理员ID过期,无人能够管理Domino服务器
  • 原文地址:https://www.cnblogs.com/Zhengxue/p/6141484.html
Copyright © 2011-2022 走看看