Cod sursa(job #1241055)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 12 octombrie 2014 15:46:51
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
using namespace std;
ifstream in("ferma2.in");
ofstream out("ferma2.out");

const int nmax = 1006;
int n, k, mat[nmax][nmax], diag[nmax][nmax], sumtot, rasp, sumlin[nmax][nmax], sumcol[nmax][nmax], d[nmax][nmax];

int main(){
	int player_unu=0;

	in>>n>>k;
	k = n - k;
	for(int i = 1; i<=n; i++)
	{
		for(int j = 1; j<=i; j++)
		{
			in>>mat[i][j];
			sumtot += mat[i][j];

			sumlin[i][j] = sumlin[i][j - 1] + mat[i][j];
			sumcol[i][j] = sumcol[i - 1][j] + mat[i][j];
			diag[i][j] = diag[i - 1][j - 1] + mat[i][j];
		}
	}

	for(int i = 1 ; i<=k ; i++)
	{
        for(int j = 1 ; j<=k ; j++)
		{
			d[1][1] += mat[i][j];
		}
	}
 
    rasp = d[1][1];
 
    for(int i = 2 ; i<=n - k + 1 ; i++)
    {
        d[i][1] = d[i - 1][1] - diag[i + k - 2][k] + sumlin[i + k - 1][k];
 
        rasp = min(rasp, d[i][1]);
 
        for(int j = 2 ; j <= i ; ++ j)
        {
            d[i][j] = d[i][j - 1] + diag[i + k - 1][j + k - 1] - diag[i - 1][j - 1] - sumcol[i + k - 1][j - 1] + sumcol[i - 1][j - 1];
 
            rasp = min(rasp, d[i][j]);
        }
    }
 
    out<<sumtot - rasp<<'\n';

	return player_unu;
}