Cod sursa(job #636929)

Utilizator FoaiaFoaia de Hartie Foaia Data 20 noiembrie 2011 02:33:27
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.1 kb
#include <algorithm>
#include <iostream>
#include <fstream>
#include <stdio.h>

#define MAX 1024

using namespace std;

int sumT[MAX], sumDiag[MAX];;
int a[MAX][MAX], sumC[MAX][MAX], sumD[MAX][MAX], sumP[MAX][MAX];
int n, k, maxGs;

int main()
{
	ifstream cin("ferma2.in");
	ofstream cout("ferma2.out");

	cin >> n >> k;
	k = n - k;

	for (int i = 1; i <= n; i++)
	{
		sumT[i] = sumT[i - 1];
		for (int j = 1; j <= i; j++)
		{
			cin >> a[i][j];

			sumT[i] += a[i][j];
		}
		
		for (int j = 1; j <= n; j++)
		{
			sumC[i][j] = sumC[i - 1][j] + sumC[i][j - 1] - sumC[i - 1][j - 1] + a[i][j];
			
			if (i >= j)
			{
				sumDiag[i - j] += a[i][j];
				sumP[i][j] = sumP[i - 1][j] + sumDiag[i - j];
			}
		}
		for (int j = i; j; j--)
			sumD[i][j] = sumD[i - 1][j - 1] + sumD[i][j + 1] - sumD[i - 1][j] + a[i][j];
		sumD[i][0] = sumD[i][1];
	}

	for (int st = k; st <= n; st++)
		for (int i = 1; i + k <= st + 1; i++)
			maxGs = max(maxGs, sumT[n] - (sumT[st] - sumC[st][i - 1] - sumD[st][i + k] + ((st >= k + 1)? sumP[st - k - 1][i - 1] : 0)));

	cout << maxGs;

	return 0;
}