Pagini recente » Cod sursa (job #588308) | Cod sursa (job #3235297) | Cod sursa (job #692403) | Cod sursa (job #2737952) | Cod sursa (job #3275626)
#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;
}