Cod sursa(job #635523)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 19 noiembrie 2011 12:50:42
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.84 kb
#include <cstdio>
#define nmax 1010

int n, k, v[nmax][nmax], sum, tot, smin, s[nmax], y[nmax][nmax], d[nmax][nmax];

int main()
{
	freopen("ferma2.in","r",stdin);
	freopen("ferma2.out","w",stdout);
	scanf("%d %d", &n, &k);
	int i, j;
	for (i=1; i<=n; i++)
		for (j=1; j<=i; j++) 
		{
			scanf("%d", &v[i][j]);
			tot+=v[i][j];
		}
	k=n-k;
	for (i=1; i<=n; i++)
		for (j=1; j<=i; j++) 
		{
			d[i][j]=d[i-1][j-1]+v[i][j];
			y[i][j]=y[i-1][j]+v[i][j];
		}
	for (i=1; i<=k; i++)
		for (j=1; j<=i; j++) s[k]+=v[i][j];
	smin=s[k];
	for (i=k+1; i<=n; i++)
	{
		s[i]=s[i-1];
		for (j=1; j<=k; j++) s[i]+=v[i][j];
		s[i]-=d[i-1][k];
		if (s[i]<smin) smin=s[i];
		sum=s[i];
		for (j=k+1; j<=i; j++) 
		{
			sum-=y[i][j-k]-y[i-k][j-k];
			sum+=d[i][j]-d[i-k][j-k];
			if (sum<smin) smin=sum;
		}
	}
	printf("%d\n",tot-smin);
}