int max(int a, int b) { if (a > b) { return a; } return b; } int knapsack(int[] v, int[] w, int n, int maxw) { if (maxw < 0) { return -99999999; } else if (maxw == 0) { return 0; } else if (n < 0) { return 0; } var include = v[n] + knapsack(v, w, n - 1, maxw - w[n]); var exclude = knapsack(v, w, n - 1, maxw); return max(include, exclude); } int program(int argc, string[] argv) { var v = new int[]{12, 1, 33, 4, 1, 2, 1, 59, 4}; var w = new int[]{2, 10, 34, 9, 20, 26, 14, 5, 4}; var maxw = 30; var n = 4; var res = knapsack(v, w, 8, maxw); return res; }