Cod sursa(job #779916)

Utilizator ELHoriaHoria Cretescu ELHoria Data 19 august 2012 01:19:46
Problema Ferma2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

using namespace std;

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

int N , K , dp[305][305][305] , s[3][505][505] , ans , val;

int memo(int k,int x,int y) {
	if(K == k) return 0;
	if(dp[k][x][y]) return dp[k][x][y];
	int dim = N - k;
	int xs = x + dim - 1;
	int ys = y;
	int xd = x + dim - 1;
	int yd = y + dim - 1;
	dp[k][x][y] = max(memo(k + 1,x,y) + s[0][xd][yd] - s[0][xs][ys - 1],memo(k + 1,x,y + 1) + s[1][xs][ys] - s[1][x - 1][y]);
	dp[k][x][y] = max(dp[k][x][y],memo(k + 1,x + 1,y) + s[2][xd][yd] - s[2][x - 1][y - 1]);
	return dp[k][x][y];
}

int main()
{
	fin>>N>>K;
	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(0,1,1);
	return 0;
}