Cod sursa(job #1845051)

Utilizator UrsuDanUrsu Dan UrsuDan Data 10 ianuarie 2017 20:21:05
Problema Ferma2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <cstdio>
#define inf 100000005

using namespace std;

int v[1005];
int trg[1005];
int d[1005];
int c[1005];
int m[1005][1005];

int main()
{
    freopen("ferma2.in","r",stdin);
    freopen("ferma2.out","w",stdout);
    int i,j,k,n,s=0,x,suml,mini,t;
    scanf("%d%d",&n,&k);
    k=n-k;
    for(i=1;i<=k;i++)
    {
        for(j=1;j<=i;j++)
        {
            scanf("%d",&x);
            s+=x;
            m[i][j]=x;
            d[i-j+1]+=x;
            c[j]+=x;
            trg[1]+=x;
        }
    }
    mini=trg[1];
    for(i=k+1;i<=n;i++)
    {
        for(j=1;j<=i;j++)
        {
            scanf("%d",&v[j]);
            m[i][j]=v[j];
            s+=v[j];
        }
        suml=0;
        for(j=i;j>=i-k+2;j--)
            suml+=v[j];
        t=d[i-k];
        for(j=i-k+1;j>=2;j--)
        {
            suml=suml+v[j]-m[i][j+k];
            trg[j]=trg[j-1]-c[j-1]+suml;
            mini=min(mini,trg[j]);
            if(i-j+1)
            d[i-j+1]+=v[j];
            c[j]=c[j]-m[i-k][j]+v[j];

        }
        suml=suml+v[1]-m[i][1+k];
        trg[1]=trg[1]+suml-t;
        mini=min(mini,trg[1]);
        d[i]+=v[1];
        c[1]=c[1]+v[1]-m[i-k][1];
    }
    printf("%d",s-mini);
    return 0;
}