Cod sursa(job #2087414)

Utilizator AndaionicaIonica Anda Maria Andaionica Data 13 decembrie 2017 16:47:03
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
using namespace std;
ifstream f("ferma2.in");
ofstream g("ferma2.out");
int n,k,i,j,s[1001][1001],sl[1001][1001],sc[1001][1001],sd[1001][1001],Min,st,v[1001][1001];
int main()
{
    f>>n>>k;
    for(i=1;i<=n-k;i++)
        for(j=1;j<=i;j++)
        {
            f>>v[i][j];
            st+=v[i][j];
            sl[i][j]=sl[i][j-1]+v[i][j];
            sc[i][j]=sc[i-1][j]+v[i][j];
            sd[i][j]=sd[i-1][j-1]+v[i][j];
        }
    for(i=n-k+1;i<=n;i++)
    {
        for(j=1;j<=n-k;j++)
        {
            f>>v[i][j];
            st+=v[i][j];
            sl[i][j]=sl[i][j-1]+v[i][j];
            sc[i][j]=sc[i-1][j]-v[i+k-n][j]+v[i][j];
            sd[i][j]=sd[i-1][j-1]+v[i][j];
        }
        for(j=n-k+1;j<=i;j++)
        {
            f>>v[i][j];
            st+=v[i][j];
            sl[i][j]=sl[i][j-1]-v[i][j+k-n]+v[i][j];
            sc[i][j]=sc[i-1][j]-v[i+k-n][j]+v[i][j];
            sd[i][j]=sd[i-1][j-1]-v[i+k-n][j+k-n]+v[i][j];
        }
    }
    for(i=1;i<=n-k;i++)
        s[n-k][n-k]+=sl[i][i];
    Min=s[n-k][n-k];
    for(i=n-k+1;i<=n;i++)
    {
        s[i][n-k]=s[i-1][n-k]-sd[i-1][n-k]+sl[i][n-k];
        Min=min(s[i][n-k],Min);
        for(j=n-k+1;j<=i;j++)
        {
            s[i][j]=s[i][j-1]-sc[i][j+k-n]+sd[i][j];
            Min=min(s[i][j],Min);
        }
    }
    g<<st-Min;
    return 0;
}