Cod sursa(job #640078)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 24 noiembrie 2011 18:45:39
Problema Ferma2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb

#include <cstdio>
#include <fstream>

using namespace std;

#define N 1001

int l[N][N],c[N][N],d[N][N],n;

inline int dig (int m)
{
	int s=0;
	for(int i=n-m+1;i<=n;++i)
		s+=d[n][i];
	return s;
}

inline int col (int q,int m)
{
	int s=0;
	for(int i=1;i<=m;++i)
		s+=c[n][i]-c[q+i-1][i];
	return s;
}

inline int lin (int q,int w,int m)
{
	int s=0;
	for(int i=n-m+1;i<=n;++i)
		s+=l[i][i-q]-l[i][w];
	return s;
}

int main ()
{
	int sol=0,k;
	ifstream in ("ferma2.in");
	in>>n>>k;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=i;++j)
		{
			in>>c[i][j];
			d[i][j]=d[i-1][j-1]+c[i][j];
			l[i][j]=l[i][j-1]+c[i][j];
			c[i][j]+=c[i-1][j];
		}
	for(int i=0;i<=k;++i)
		for(int j=0;i+j<=k;++j)
		{
			int s=0,q=k-(i+j);
			if(i)
				s+=dig(i);
			if(j)
				s+=col(i,j);
			if(q)
				s+=lin(i,j,q);
			if(s>sol)
				sol=s;
		}
	freopen ("ferma2.out","w",stdout);
	printf("%d",sol);
	return 0;
}