Cod sursa(job #3275626)

Utilizator Carnu_EmilianCarnu Emilian Carnu_Emilian Data 11 februarie 2025 09:55:07
Problema Ferma2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("ferma2.in");
ofstream fcout("ferma2.out");

const int N = 1e3 + 5;
int v[N][N], sh[N][N], dp[N][N], sd[N][N], sv[N][N];
int n, k;

int main()
{
    int sum = 0;
    fcin >> n >> k;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++)
        {
            fcin >> v[i][j];
            sum += v[i][j];
        }
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            sh[i][j] = sh[i][j - 1] + v[i][j];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            sv[i][j] = sv[i - 1][j] + v[i][j];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            sd[i][j] = sd[i - 1][j - 1] + v[i][j];
    int l = n - k;
    for (int i = 1; i <= l; i++)
        dp[1][1] += sh[i][i];
    for (int i = 1; i <= n - l + 1; i++)
    {
        if (i != 1)
            dp[i][1] = dp[i - 1][1] - sd[i + l - 2][l] + sh[i + l - 1][l];
        for (int j = 2; j <= n; j++)
            dp[i][j] = dp[i][j - 1] - (sv[i + l - 1][j - 1] - sv[i - 1][j - 1]) +
                        (sd[i + l - 1][j + l - 1] - sd[i - 1][j - 1]);
    }
    int minn = dp[1][1];
    for (int i = 1; i <= n - l + 1; i++)
        for (int j = 1; j <= i; j++)
            minn = min(minn, dp[i][j]);
    int rasp = sum - minn;
    fcout << rasp;


    return 0;
}