Pagini recente » Cod sursa (job #3151474) | Cod sursa (job #767733) | Cod sursa (job #2388595) | Cod sursa (job #277285) | Cod sursa (job #636068)
Cod sursa(job #636068)
#include <iostream>
#include <cstdio>
using namespace std;
#define MAXN 1050
inline int min(int a, int b)
{
return a < b ? a : b;
}
int n, k, c[MAXN][MAXN], sp[MAXN][MAXN], sd[MAXN][MAXN], sl[MAXN][MAXN], sc[MAXN][MAXN];
FILE* fin = fopen("ferma2.in", "r");
FILE* fout = fopen("ferma2.out", "w");
int main()
{
fscanf (fin, "%d %d\n", &n, &k);
int sum = 0, size = n - k;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= i; ++j) {
fscanf (fin, "%d ", &c[i][j]);
sum += c[i][j];
sd[i][j] = sd[i - 1][j - 1] + c[i][j];
sc[i][j] = sc[i - 1][j] + c[i][j];
sl[i][j] = sl[i][j - 1] + c[i][j];
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= i; ++j) {
if (i <= size) {
sp[size][1] += c[i][j];
} else {
if (j == 1) {
sp[i][1] = sp[i - 1][1] - sd[i - 1][size] + sl[i][size];
} else if (j <= i - size + 1) {
sp[i][j] = sp[i][j - 1] - sc[i][j - 1] + sc[i - size][j - 1] + sd[i][j + size - 1] - sd[i - size][j - 1];
}
}
}
}
int minv = 0x3f3f3f3f;
for (int i = size; i <= n; ++i) {
for (int j = 1; j <= i - size + 1; ++j) {
minv = min(minv, sp[i][j]);
}
}
fprintf (fout, "%d\n", sum - minv);
fclose(fin);
fclose(fout);
return 0;
}