Pagini recente » Cod sursa (job #1364811) | Cod sursa (job #404142) | Cod sursa (job #142527) | Cod sursa (job #1952516) | Cod sursa (job #1240689)
#include <stdio.h>
#define MAXN 1000
int m[MAXN+1][MAXN+1], diag[MAXN+1][MAXN+1], lin[MAXN+1][MAXN+1], col[MAXN+1][MAXN+1], d[MAXN+1][MAXN+1], n, k;
inline void read_in(){
FILE *fin;
fin=fopen("ferma2.in", "r");
int i, j;
fscanf(fin, "%d%d", &n, &k);
for(i=1; i<=n; i++){
for(j=1; j<=i; j++){
fscanf(fin, "%d", &m[i][j]);
}
}
fclose(fin);
}
inline void built_diag(){
int l, i, j;
for(l=1; l<=n; l++){
for(i=l, j=1; i<=n; i++, j++){
diag[l][j]=diag[l][j-1]+m[i][j];
}
}
}
inline void built_lin(){
int i, j;
for(i=1; i<=n; i++){
for(j=1; j<=i; j++){
lin[i][j]=lin[i][j-1]+m[i][j];
}
}
}
inline void built_col(){
int i, j;
for(i=1; i<=n; i++){
for(j=i; j<=n; j++){
col[j][i]=col[j-1][i]+m[j][i];
}
}
}
inline void built_rez(){
int val, i, l, c;
val=0;
for(i=1; i<=k; i++){
val+=diag[i][n-i+1];
}
for(l=0; l<=k; l++){
d[l][0]=val;
val=val+lin[n-l][n-k]-diag[k-l][n-k];
for(c=1; l+c<=k; c++){
d[l][c]=d[l][c-1]-diag[k-l-c+1][n-k+c]+diag[k-l-c+1][c]+col[n-l][c]-col[k-l][c];
}
}
}
inline void print_out(){
int max, i, j;
FILE *fout;
fout=fopen("ferma2.out", "w");
max=0;
for(i=0; i<=k; i++){
for(j=0; j<=k; j++){
if(max<d[i][j]){
max=d[i][j];
}
}
}
fprintf(fout, "%d\n", max);
fclose(fout);
}
int main(){
read_in();
built_diag();
built_lin();
built_col();
built_rez();
print_out();
return 0;
}