C#版01揹包

 class Program
    {
        static void Main(string[] args)
            int[] weights = { 2, 4, 6, 5, 4 };
            int[] values = { 9, 3, 7, 4, 6 };
            PacketItem[] PacketItems = new PacketItem[weights.Length];
            for (int i = 0; i < weights.Length; i++)
            {
                PacketItems[i] = new PacketItem(weights[i], values[i]);
            }
             var result = Get01Packet(PacketItems, 10);
            Console.ReadKey();
        }

        public class PacketItem
        {
            public int Weight { get; set; }
            public int Value { get; set; }
            public PacketItem(int weight, int value)
            {
                this.Weight = weight;
                this.Value = value;           
            }
        }

        public static int Get01Packet(PacketItem[] PacketItems, int bagSize)
        {
            PacketItem item;
            int[,] bagMatri = new int[PacketItems.Length + 1, bagSize + 1];
            for (int i = 1; i < bagSize + 1; i++)
            {
                for (int j = 1; j < PacketItems.Length+1; j++)
                {
                    item = PacketItems[j-1];
                    if (item.Weight > i)
                    {
                        if (j-1 == 0)
                        {
                            bagMatri[j, i] = 0;
                        }
                        else
                        {
                            bagMatri[j, i] = bagMatri[j - 1, i];
                        }

                    }
                    else
                    {
                        int itemInBag = 0;
                        if (j-1 == 0)
                        {
                            bagMatri[j, i] = item.Value;
                            continue;
                        }
                        else
                        {
                            itemInBag = bagMatri[j-1, i - item.Weight] + item.Value;
                        }

                        if (bagMatri[j - 1, i] > itemInBag)
                        {
                            bagMatri[j, i] = bagMatri[j - 1, i];
                        }
                        else
                        {
                            bagMatri[j, i] = itemInBag;
                        }                      
                    }
                }

            }
            int result = 0;
            for (int i = 1; i < bagSize + 1; i++)//
            {
                for (int j = 1; j < PacketItems.Length + 1; j++)
                {
                    if (bagMatri[j, i]>result)
                    {
                        result = bagMatri[j, i];
                    }
         
                }
            }
            return result;
        }
    }



   


運行結果 :18

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章