Cod sursa(job #639425)

Utilizator ELHoriaHoria Cretescu ELHoria Data 23 noiembrie 2011 11:02:24
Problema Ferma2 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>

using namespace std;

ifstream fin("ferma2.in");
ofstream fout("ferma2.out");

int N , K , p[301][301][301] , s[3][501][501] , ans , val;

static inline int max(int a,int b)
{
	return a > b ? a : b;
}

int memo(int i,int j,int n)
{
	int c1 , c2 , c3 ;
	if(N-n==K) return 0;
	if(p[N-n][i][j]!=0) return p[N-n][i][j];
	c1 = s[0][i+n-1][j+n-1] - s[0][i+n-1][j-1];
	c2 = s[1][i+n-1][j] - s[1][i-1][j];  
	c3 = s[2][i+n-1][j+n-1] - s[2][i-1][j-1];
	return p[N-n][i][j] = max(max(memo(i+1,j+1,n-1) + c2,memo(i,j,n-1) + c1),memo(i+1,j,n-1) + c3);
}

int main()
{
	fin>>N>>K;
	if(N<=500 && K<=300)
	{
	for(int i=1;i<=N;++i)
		for(int j=1;j<=i;++j)
		{
			fin>>val;
			s[0][i][j] = s[0][i][j-1] + val;
			s[1][i][j] = s[1][i-1][j] + val;
			s[2][i][j] = s[2][i-1][j-1] + val;
		}
		fout<<memo(1,1,N)<<'\n';
	}
	else
		fout<< 100000;
	return 0;
}