Cod sursa(job #638187)

Utilizator rootsroots1 roots Data 20 noiembrie 2011 19:26:00
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.23 kb
#include <fstream>

using namespace std;

ifstream in;
ofstream out;

int v[1010][1010];
int a[1010][1010];
int b[1010][1010];
int c[1010][1010];

int main()
{
    int M,N,K,S,min;

    in.open("ferma2.in");
    in>>N>>K;
    for(int i=1;i<=N;++i)
        for(int j=1;j<=i;++j)
            in>>v[i][j];
    in.close();

    for(int i=1;i<=N;++i)
        for(int j=1;j<=i;++j)
            a[i][j]=a[i-1][j]+v[i][j];
    for(int i=1;i<=N;++i)
        for(int j=1;j<=i;++j)
            a[i][j]+=a[i][j-1];

    for(int i=N;i>0;--i)
        for(int j=1;j<=i;++j)
            b[i][j]=b[i][j-1]+v[i][j];
    for(int i=N;i>0;--i)
        for(int j=1;j<=i;++j)
            b[i][j]+=b[i+1][j+1];

    for(int j=N;j>0;--j)
        for(int i=N;i>=N-j+1;--i)
            c[i][j-N+i]=c[i+1][j-N+i+1]+v[i][j-N+i];
    for(int j=N;j>0;--j)
        for(int i=N;i>=N-j+1;--i)
            c[i][j-N+i]+=c[i-1][j-N+i];

    M=N-K;
    S=a[N][N];
    min=S;

    for(int i=1;i<=K+1;++i)
        for(int j=1;j<=i;++j)
            if(min>S-a[i+M-1][j-1]-b[i+M][j+M]-c[i-1][j])
                min=S-a[i+M-1][j-1]-b[i+M][j+M]-c[i-1][j];

    out.open("ferma2.out");
    out<<S-min<<'\n';
    out.close();

    return 0;
}