Cod sursa(job #2080546)

Utilizator mari2001Maria Ionescu mari2001 Data 3 decembrie 2017 10:56:41
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio>
int v[1005][1005],spl[1005][1005],spc[1005][1005],spd[1005][1005];
int main(){
freopen("ferma2.in","r",stdin);
freopen("ferma2.out","w",stdout);
int n,k,i,j,s=0,l,c,bs;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%d",&v[i][j]),s=s+v[i][j];
int sk=0;
k=n-k;
for(i=1;i<=k;i++)
for(j=1;j<=i;j++)
sk=sk+v[i][j];
for(i=1;i<=n-k+1;i++){
l=i;
c=1;
while(c<=k){
spd[i][1]+=v[l][c];
l++;
c++;}}
for(i=1;i<=n-k+1;i++){
for(j=2;j<=i;j++)
spd[i][j]=spd[i-1][j-1]-v[i-1][j-1]+v[i+k-1][j+k-1];}
for(i=k;i<=n;i++){
for(j=1;j<=k;j++)
spl[i][1]=spl[i][1]+v[i][j];}
for(i=1;i<=n-k+1;i++){
l=i;
c=i;
while(l<=i+k-1){
spc[i][i]+=v[l][c];
l++;}}
for(j=1;j<=n;j++)
for(i=j+1;i<=n-k+1;i++)
spc[i][j]=spc[i-1][j]-v[i-1][j]+v[i+k-1][j];
int mink=sk;
for(i=2;i<=n-k+1;i++){
sk=sk-spd[i-1][1]+spl[i+k-1][1];
if (sk<mink)
mink=sk;
bs=sk;
for(j=2;j<=i;j++){
sk=sk-spc[i][j-1]+spd[i][j];
if (sk<mink)
mink=sk;}
sk=bs;}
printf("%d\n",s-mink);
return 0;}