static void Main(string[] args) { int M = 30; di[] D = new di[] { new di(16, 20), new di(12, 14) }; di[] r = new di[0]; int P = Perebor(M, D, out r); foreach (di dt in D) { Console.WriteLine(dt.ToString()); } Console.WriteLine(P); foreach (di dt in r) { Console.WriteLine(dt.ToString()); } Console.ReadKey(); }
static int Perebor(int M, di[] D, out di[] r) { int P = 0; int pt = 0; r = new di[0]; di[] rt = new di[0]; foreach (di dt in D) { if (M >= dt.M) { pt = Perebor(M - dt.M, D, out r); if (pt + dt.P > P) { P = pt + dt.P; Array.Resize(ref r, r.Length + 1); r[r.Length - 1] = dt; rt = r; } } } r = rt; return(P); }