C# 算法系列 - 貪婪算法(背包問題)


using System;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*===========貪婪算法-背包問題==============
                背包問題(Knapsack problem)是一種組合優化的NP完全問題。
                問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,我們如何選擇,才能使得背包里物品的總價格最高。
                問題的名稱來源於如何選擇最合適的物品放置於給定背包中。
                相似問題經常出現在商業、組合數學,計算復雜性理論、密碼學和應用數學等領域中。
                也可以將背包問題描述為決定性問題,即在總重量不超過W的前提下,總價值是否能達到V             
             */
            //貨物重量和價值
            int[,] a;
            //背包承重
            int w;
            //測試數據,答案是334
            a = new int[,] { { 79, 58, 86, 11, 28, 62, 15, 68 }, { 83, 14, 54, 79, 72, 52, 48, 62 } };
            w = 200;
            int v; //最大價值
            v = GetMaxValue(w, a, 0);
            Console.WriteLine($"背包能實現的最大價值為:{v}");
            Console.ReadKey();
        }
 
        /// <summary>
        /// 獲得背包承重w,裝貨物o,從第k件向后考慮,得到的最大價值
        /// </summary>
        /// <param name="w">背包承重</param>
        /// <param name="o">貨物o</param>
        /// <param name="k">第幾件開始默認索引0</param>
        /// <returns></returns>
        public static int GetMaxValue(int w, int[,] o, int k)
        {
            int v, t1, t2;
            //如果是最后一件貨物
            if (k == o.GetLength(1) - 1)
            {
                if (w >= o[0, k])
                {
                    v = o[1, k];
                }
                else
                {
                    v = 0;
                }
            }
            //如果裝得下當前貨物
            else if (w >= o[0, k])
            {
                t1 = GetMaxValue(w - o[0, k], o, k + 1) + o[1, k];
                t2 = GetMaxValue(w, o, k + 1);
                v = GetMax(t1, t2);
            }
            //裝不下當前貨物的情況
            else
            {
                v = GetMaxValue(w, o, k + 1);
            }
            return v;
        }
        public static int GetMax(int a, int b)
        {
            return a > b ? a : b;
        }
 
    }
}

MSCL超級工具類庫
基於C#開發的超強工具類,包含數據庫操作,字符串處理,文件或者文件夾處理
網絡請求,緩存處理,數據容器等上百個常用工具類封裝,附帶調用示例和參數說明,
提供CHM詳細文檔,上百個生產環境使用,穩定高效,簡單易用。
真正做到“工具在手,一切盡有”,讓你大幅度的提高編程效率,提高編程水平。
聯系QQ:7400799(請備注 "MSCL")

===============================================

重要壓縮文件忘記解壓密碼?網上下載rar/zip/7z等壓縮文件,需要密碼?
====極速解密助手,支持支持RAR/ZIP/7Z等多種壓縮文檔解密======
★ 解密不超過24小時,跟密碼復雜程度相關
★ 解密成功后再收費,無套路
★ 解密成功后自動刪除原件,無后顧之憂
聯系QQ:7400799(請備注 "文件解密")

==============================================

Magic.Orm已在數百個成熟項目中應用,是比較完善的ORM框架(基於C#開發)。開發過程中參考了NBear與MySoft,吸取了其中的一些精華,加入新思想,
后期參考EF的Lambda語法進行大量擴展。

為什么選擇Magic.Orm?

  • 上手簡單,0學習成本。使用方便,按照sql書寫習慣編寫C#.NET代碼。功能強大。
  • 高性能,接近手寫Sql。
  • 體積小(不到200kb,僅一個dll)。
  • 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等數據庫。
  • 支持大量Lambda表達式寫法。
  • 不需要像NHibernate的XML配置,不需要像EF的各種數據庫連接驅動,集成簡單。

購買源碼 請聯系QQ:7400799(請備注 "ORM")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM