Pagini recente » Cod sursa (job #1983254) | Cod sursa (job #552386) | Cod sursa (job #1905494) | Cod sursa (job #595392) | Cod sursa (job #639236)
Cod sursa(job #639236)
#include <cstdio>
#include <algorithm>
using namespace std;
#define maXN 1005
int A[maXN][maXN], linie[maXN][maXN], col[maXN][maXN], diag[maXN][maXN];
int sum[maXN][maXN], S;
int main()
{
freopen ("ferma2.in", "r", stdin);
freopen ("ferma2.out", "w", stdout);
int N, K;
scanf ("%d %d", &N, &K);
for (int i = 1; i <= N; ++ i)
for (int j = 1; j <= i; ++ j)
{
scanf ("%d", &A[i][j]);
linie[i][j] = linie[i][j - 1] + A[i][j];
col[i][j] = col[i - 1][j] + A[i][j];
diag[i][j] = diag[i - 1][j - 1] + A[i][j];
S += A[i][j];
}
int X = N - K;
for (int i = 1; i <= X; ++ i) sum[X][X] += linie[i][i];
int sol = sum[X][X];
for (int i = X + 1; i <= N; ++ i)
for (int j = 1; j <= i; ++ j)
{
if (j - X >= 0 && i - X >= 0)
sum[i][j] = sum[i][j - 1] - (col[i][j - X] - col[i - X][j - X]) + diag[i][j] - diag[i - X][j - X];
else sum[i][j] = sum[i][j - 1] + diag[i][j] - diag[i - X][j - X];
if (i - X >= 0 && j - X >= 0) sol = min (sol, sum[i][j]);
}
printf ("%d", S - sol);
return 0;
}