package work; import java.util.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Work { public static void main(String args[]) { 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 { FileReader in = new FileReader("profit.in"); FileWriter out = new FileWriter("profit.out"); BufferedReader bin = new BufferedReader(in); Scanner sc = new Scanner(bin); m = sc.nextInt(); n = sc.nextInt(); for (i=1; i<=n; i++) { b[i][0]=0; x[i]=0; } for (j=1; j<=m; j++) for (i=1; i<=n; i++) b[i][j]=sc.nextInt(); in.close(); 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); out.write(""+p+"\n"); for (i=1; i