示例#1
0
        static int knapsack(datapacket d1head, int capacity)
        {
            if (capacity == 0 | d1head == null)
            {
                return(0);
            }

            if (d1head.weight > capacity)
            {
                d1head = d1head.nextlink;
                return(knapsack(d1head, capacity));
            }
            else
            {
                int tmp2 = knapsack(d1head.nextlink, capacity);
                int tmp1 = d1head.value + (knapsack(d1head.nextlink, capacity - d1head.weight));
                return(Math.Max(tmp2, tmp1));
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            datapacket data = new datapacket();

            data.weight = 2;
            data.value  = 1;

            datapacket d1 = new datapacket();

            d1.weight     = 3;
            d1.value      = 2;
            data.nextlink = null;

            datapacket d2 = new datapacket();

            d2.weight   = 4;
            d2.value    = 5;
            d2.nextlink = null;

            datapacket d3 = new datapacket();

            d3.weight   = 5;
            d3.value    = 6;
            d3.nextlink = null;

            data.nextlink = d1;
            d1.nextlink   = d2;
            d2.nextlink   = d3;
            datapacket head = data;

            while (head != null)
            {
                Console.WriteLine(head.weight);
                head = head.nextlink;
            }

            Console.WriteLine(knapsack(data, 8));
            Console.ReadLine();
        }