#include using namespace std; const unsigned n_max=101, m_max=101; unsigned b[n_max][m_max], // вхідні дані f[n_max][m_max], // оптимальні результати для різної кількості монет, що залишилися q[n_max][m_max], // оптимальні рішення на кожному з кроків прийняття рішення x[n_max], // оптимальне рішення i,j,k,l,m,n,p; // лічильники int main() { ifstream fi; // оголошення потоку зчтитування з файлу fi ofstream fo; // оголошення потоку запису у файл fo fi.open("profit.in"); // прив'язування назви файлу до змінної fi fo.open("profit.out"); // прив'язування назви файлу до змінної fo fi>>m>>n; 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++) fi>>b[i][j]; fi.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); fo<