Cod sursa(job #636637)

Utilizator ChallengeMurtaza Alexandru Challenge Data 19 noiembrie 2011 22:06:13
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.03 kb
#include <fstream>

using namespace std;

const char InFile[]="ferma2.in";
const char OutFile[]="ferma2.out";
const int MaxN=1024;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,S,Smin,K,A[MaxN][MaxN],SOL[MaxN][MaxN],L[MaxN][MaxN],C[MaxN][MaxN],D[MaxN][MaxN];

int main()
{
    fin>>N>>K;
    for(int i=1;i<=N;++i)
	{
        for(int j=1;j<=i;++j)
        {
            fin>>A[i][j];
			S+=A[i][j];
            L[i][j]=L[i][j-1]+A[i][j];
            C[i][j]=C[i-1][j]+A[i][j];
            D[i][j]=D[i-1][j-1]+A[i][j];
        }
	}
	fin.close();

    K=N-K;

    for(int i=1;i<=K;++i)
	{
        for(int j=1;j<=i;++j)
		{
            SOL[1][1]+=A[i][j];
		}
	}

    int Smin=SOL[1][1];

    for(int i=2;i<=N-K+1;++i)
    {
        SOL[i][1]=SOL[i-1][1]-D[i+K-2][K]+L[i+K-1][K];
        Smin=min(Smin,SOL[i][1]);
        for(int j=2;j<=i;++j)
        {
            SOL[i][j]=SOL[i][j-1]+D[i+K-1][j+K-1]-D[i-1][j-1]-(C[i+K-1][j-1]-C[i-1][j-1]);
            Smin=min(Smin,SOL[i][j]);
        }
    }

    fout<<S-Smin;
    fout.close();
    return 0;
}