Cod sursa(job #636246)

Utilizator SpiderManSimoiu Robert SpiderMan Data 19 noiembrie 2011 18:05:21
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.13 kb
#include <fstream>
using namespace std;

ifstream f("ferma2.in");
ofstream g("ferma2.out");

int n, s, k;
int a[1010][1010], sol[1010][1010], lin[1010][1010], col[1010][1010], diag[1010][1010];
int main()
{
    f >> n >> k;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= i; ++j)
        {
            f >> a[i][j], s += a[i][j];
            lin[i][j] = lin[i][j - 1] + a[i][j];
            col[i][j] = col[i - 1][j] + a[i][j];
            diag[i][j] = diag[i - 1][j - 1] + a[i][j];
        }

    k = n - k;

    for (int i = 1; i <= k; ++i)
        for (int j = 1; j <= i; ++j)
            sol[1][1] += a[i][j];

    int ss = sol[1][1];

    for (int i = 2; i <= n - k + 1; ++i)
    {
        sol[i][1] = sol[i - 1][1] - diag[i + k - 2][k] + lin[i + k - 1][k];
        if (ss > sol[i][1]) ss = sol[i][1];
        for (int j = 2; j <= i; ++j)
        {
            sol[i][j] = sol[i][j - 1] + diag[i + k - 1][j + k - 1] - diag[i - 1][j - 1] - (col[i + k - 1][j - 1] - col[i - 1][j - 1]);
            if (ss > sol[i][j]) ss = sol[i][j];
        }
    }

    g << s - ss;
    g.close();
    return 0;
}