Pagini recente » Cod sursa (job #2367587) | Cod sursa (job #355851) | Cod sursa (job #2026188) | Cod sursa (job #2626532) | Cod sursa (job #889985)
Cod sursa(job #889985)
#include <iostream>
#include <cstdio>
using namespace std;
#define Nmax 1024
int N, K;
int Suma, minim;
int mat[Nmax][Nmax];
int linie[Nmax][Nmax];
int coloana[Nmax][Nmax];
int diag[Nmax][Nmax];
int d[Nmax][Nmax];
void citire(){
freopen("ferma2.in", "r", stdin);
scanf("%d %d", &N, &K);
for(int i = 1; i <= N; i++)
for(int j = 1; j <= i; j++){
scanf("%d", &mat[i][j]);
Suma += mat[i][j];
cout<<mat[i][j]<<" ";
}
fclose(stdin);
}
void init(){
for(int i = 1; i <= N; i++)
for(int j = 1; j <= i; j++){
linie[i][j] = linie[i][j - 1] + mat[i][j];
coloana[i][j] = coloana[i - 1][j] + mat[i][j];
diag[i][j] = diag[i - 1][j - 1] + mat[i][j];
}
K = N - K;
for(int i = 1; i <= K; i++)
for(int j = 1; j <= i; j++)
d[1][1] += mat[i][j];
minim = d[1][1];
}
void dinamica(){
for(int i = 2; i <= N - K + 1; i++){
d[i][1] = d[i-1][1] - diag[i + K - 2][K] + linie[i + K - 1][K];
minim = min(minim, d[i][1]);
for(int j = 2; j <= i; j++){
d[i][j] = d[i][j - 1] + diag[i + K - 1][j + K - 1] - diag[i - 1][j - 1] -
coloana[i + K - 1][j - 1] + coloana[i - 1][j - 1];
minim = min(minim, d[i][j]);
}
}
}
void afis(){
freopen("ferma2.out", "w", stdout);
printf("%d\n", Suma - minim);
fclose(stdout);
}
int main(){
citire();
init();
dinamica();
afis();
return 0;
}