public void Case1()
 {
     var data = new[]
         {
             new Tuple<int, int>(8, 4),
             new Tuple<int, int>(15, 8),
             new Tuple<int, int>(4, 3),
             new Tuple<int, int>(10, 5),
         };
     var alg = new KnapsackAlg();
     Assert.AreEqual(19, alg.CalcOptimalValue(data, 11));
 }
        public void Case2()
        {
            var data = new[]
                {
                    new Tuple<int, int>(3, 4),
                    new Tuple<int, int>(2, 3),
                    new Tuple<int, int>(4, 2),
                    new Tuple<int, int>(4, 3),
                };

            var alg = new KnapsackAlg();
            Assert.AreEqual(8, alg.CalcOptimalValue(data, 6));
        }
        private static void CalcKnapsack(string filePath)
        {
            var lines = File.ReadAllLines(filePath);
            var firstLine = lines[0].Split(' ');
            int capacity = int.Parse(firstLine.First());
            int inputCount = int.Parse(firstLine.Skip(1).First());
            var input = new List<Tuple<int, int>>(inputCount);
            input.AddRange(lines.Skip(1).Select(
                line => line.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries))
                    .Select(node => new Tuple<int, int>(
                        int.Parse(node.First()),
                        int.Parse(node.Skip(1).First()))));

            var knapsackAlg = new KnapsackAlg();

            Console.WriteLine("knapsack: {0}", knapsackAlg.CalcOptimalValue(input.ToArray(), capacity));
        }