using System; using System.IO; using System.Collections; using System.Collections.Generic; class Example { public static void Main() { int n_max=101, m_max=101; int[,] b = new int[n_max,m_max]; // вхідні дані int[,] f = new int[n_max,m_max]; // оптимальні результати для різної кількості монет, що залишилися int[,] q = new int[n_max,m_max]; // оптимальні рішення на кожному з кроків прийняття рішення int[] x = new int[n_max]; // оптимальне рішення int i,j,k,l=0,m,n,p; // лічильники try { using (StreamReader file = new StreamReader("profit.in")) { string[] s = file.ReadLine().Split(' '); m = Int32.Parse(s[0]); n = Int32.Parse(s[1]); for (i=1; i<=n; i++) { b[i,0]=0; x[i]=0; } for (j=1; j<=m; j++) { s = file.ReadLine().Split(' '); for (i=1; i<=n; i++) b[i,j]=Int32.Parse(s[i-1]); } for (j=0; j<=m; j++) { f[1,j]=b[1,j]; q[1,j]=j; } for (i=2; i<=n; i++) for (j=0; j<=m; j++) { p=0; for (k=0; k<=j; k++) if (f[i-1,j-k]+b[i,k]>p) { p=f[i-1,j-k]+b[i,k]; l=k; } f[i,j]=p; q[i,j]=l; } p=f[n,m]; i=n; do {x[i]=q[i,m]; m=m-x[i]; i--;} while (m>0); string answer = Convert.ToString(p)+"\n"; for (i=1; i