Cod sursa(job #2056223)

Utilizator stefanst77Luca Stefan Ioan stefanst77 Data 4 noiembrie 2017 10:04:13
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>
#define nmax 1001
using namespace std;

/// matricea initiala nu e necesara
int sl[nmax][nmax]; /// sume partiale pe linii
int sc[nmax][nmax];  /// sume partiale pe coloane
int sd[nmax][nmax];  /// sume partiale pe diagonale
int n, k, L;
int S; /// suma totala a matricei

/// determin suma minima a unui triunghi dreptunghic
/// cu latura L = n - k

int main()
{
    int i, j, x, s, s1, smin;
    /// citire simultan cu sumele partiale
    ifstream fin("ferma2.in");
    fin >> n >> k;
    L = n - k;
    for (i = 1; i <= n; ++i)
        for (j = 1; j <= i; ++j)
        {
            fin >> x;
            ///a[i][j] = x;
            S += x;
            sl[i][j] = x + sl[i][j - 1];
            sc[i][j] = x + sc[i - 1][j];
            sd[i][j] = x + sd[i - 1][j - 1];
        }
    fin.close();

    /// calculez suma triunghiului format din primele L linii
    s = 0;
    for (i = 1; i <= L; ++i)
        s += sl[i][i];
    smin = s1 = s;
    for (i = 2; i <= n - L + 1; i++)
    {
        s1 = s = s1 + sl[i + L - 1][L] - sd[i + L - 2][L];
        smin = min(smin, s);
        for (j = 2; j <= i; ++j)
        {
            s = s - (sc[i+L-1][j-1] - sc[i-1][j-1]) +
                (sd[i+L-1][j+L-1] - sd[i-1][j-1]);
            smin = min(smin, s);
        }
    }
    ofstream fout("ferma2.out");
    smin = S - smin;
    fout << smin << "\n";
    fout.close();
    return 0;
}