Cod sursa(job #2336981)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 5 februarie 2019 19:08:11
Problema Ferma2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define Dim 1005
using namespace std;
ifstream f("ferma2.in");
ofstream g("ferma2.out");
int N,K,V[Dim][Dim],Tr[Dim][Dim],A[Dim][Dim];
int cnt,p=1,sol,dist,ans;

struct info
{
    int line,dg;
}S[Dim][Dim];

int main()
{
    f>>N>>K;
    for(int i=1;i<=N;i++)
    for(int j=1;j<=i;j++)
    {
        f>>V[i][j];
        sol+=V[i][j];
        S[i][j].line=S[i][j-1].line+V[i][j];
        S[i][j].dg=S[i-1][j-1].dg+V[i][j];
    }
    dist=N-K;
    for(int i=1;i<=N;i++)
    {
        if(i>=dist) cnt++;
        for(int j=i;j>=1;j--)
        {
            Tr[i][j]=Tr[i-1][j]+S[i][i].line-S[i][j-1].line;
            if(i>=dist&&j==cnt)
            {
                A[i][cnt]=Tr[i][cnt];
                ans=max(ans,sol-A[i][cnt]);
            }
        }
    }
    cnt=1;
    for(int i=dist+1;i<=N;i++)
    {
        cnt++;
        for(int j=1;j<cnt;j++)
        {
            A[i][j]=A[i-1][j]+S[i][j+dist-1].line-S[i][j-1].line-(S[i-1][j+dist-1].dg-S[i-dist-1][j-1].dg);
            ans=max(ans,sol-A[i][j]);
        }
    }
    g<<ans;
    return 0;
}