Pagini recente » Cod sursa (job #2129351) | Cod sursa (job #2645632) | Cod sursa (job #2114109) | Cod sursa (job #2735952) | Cod sursa (job #636875)
Cod sursa(job #636875)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 1024
int N, K, S, sol = 999999999;
int A[maxn][maxn], lin[maxn][maxn], col[maxn][maxn];
int main() {
FILE *f1=fopen("ferma2.in", "r"), *f2=fopen("ferma2.out", "w");
int i, j, p, q;
fscanf(f1, "%d %d\n", &N, &K);
for(i=1; i<=N; i++) {
for(j=1; j<=i; j++) {
fscanf(f1, "%d", &A[i][j]);
S += A[i][j];
lin[i][j] = lin[i][j-1] + A[i][j];
}
}
for(i=1; i<=N; i++) {
for(j=i; j<=N; j++) {
col[i][j] = col[i][j-1] + A[j][i];
}
}
for(i=1; i<=N; i++) {
//A[i][1] -> A[i+1][2] -> A[i+2][3] -> ...
//triunghi de latura N - K
if(i+N-K-1 > N) break;
int aux = 0;
for(j=i; j<=i+N-K-1; j++) {
aux = aux + lin[j][j-i+1];
}
sol = min(sol, aux);
for(j=1; j<=N; j++) {
if(i+j+N-K-1 > N) break;
//(i+j, j+1)
aux -= (col[j][i+j-1+N-K-1] - col[j][i+j-2]);
aux += (lin[i+j+N-K-1][j+N-K] - lin[i+j+N-K-1][j]);
sol = min(sol, aux);
}
}
fprintf(f2, "%d\n", S - sol);
fclose(f1); fclose(f2);
return 0;
}