Pagini recente » Cod sursa (job #262713) | Cod sursa (job #1493851) | Cod sursa (job #185119) | Cod sursa (job #2100011) | Cod sursa (job #1320071)
#include <cstdio>
FILE* in=fopen("ferma2.in","r");
FILE* out=fopen("ferma2.out","w");
const int Q=1007;
int n,k;
int v[Q][Q];
int sum;
int spl[Q][Q],spc[Q][Q],spd[Q][Q];
struct tipe{
int x,y,sum;
} t[2*Q];
int main()
{
fscanf(in,"%d%d",&n,&k);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=i; j++)
{
fscanf(in,"%d",&v[i][j]);
spl[i][j]=v[i][j]+spl[i][j-1];
spc[i][j]=v[i][j]+spc[i-1][j];
spd[i][j]=v[i][j]+spd[i-1][j-1];
sum+=v[i][j];
}
}
int d=n-k;
int nr=0;
for(int i=d; i<=n; i++)
{
nr++;
t[nr].x=i;
t[nr].y=1;
for(int j=i-d+1; j<=i; j++)
{
t[nr].sum+=spl[j][j-(i-d)];
}
}
/*
int lung;
for(int i=d+1; i<=n; i++)
{
nr++;
t[nr].x=n;
t[nr].y=i-d+1;
lung=d;
for(int j=i-d+1; j<=i; j++)
{
t[nr].sum+=spc[n][j]-spc[n-lung][j];
lung--;
}
}
*/
int min=2000000000;
for(int i=1; i<=nr; i++)
if(t[i].sum<min)
min=t[i].sum;
bool cont=1;
while(cont)
{
cont=0;
for(int i=1; i<=nr; i++)
{
if(t[i].y+1<=i)
{
cont=1;
t[i].sum-=spc[t[i].x][t[i].y]-spc[t[i].x-d][t[i].y];
// t[i].sum-=spl[t[i].x][t[i].y+d-1]-spl[t[i].x][t[i].y-1];
// t[i].sum+=v[t[i].x][t[i].y];
t[i].sum+=spd[t[i].x][t[i].y+d]-spd[t[i].x-d][t[i].y];
t[i].y++;
if(t[i].sum<min)
min=t[i].sum;
}
}
}
fprintf(out,"%d",sum-min);
return 0;
}