Pagini recente » Cod sursa (job #1505516) | Borderou de evaluare (job #1559575) | Cod sursa (job #1813556) | Cod sursa (job #829723) | Cod sursa (job #2474605)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ferma2.in");
ofstream fout("ferma2.out");
const int DIM = 1007;
int v[DIM][DIM];
int sp1[DIM][DIM];
int sp2[DIM][DIM];
int sp3[DIM][DIM];
int dp[DIM][DIM];
main()
{
int n, k;
fin >> n >> k;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
{
fin >> v[i][j];
sp1[i][j] = v[i][j] + sp1[i][j - 1];
sp2[i][j] = v[i][j] + sp2[i - 1][j];
sp3[i][j] = v[i][j] + sp3[i - 1][j - 1];
}
int sum = 0;
k = n - k;
for(int i = 1; i <= k; i++)
for(int j = 1; j <= i; j++)
sum += v[i][j];
dp[k][k] = sum;
int res = sum;
for(int i = k + 1; i <= n; i++)
{
dp[i][k] = dp[i - 1][k] + sp1[i][k] - sp3[i - 1][k];
res = min(res, dp[i][k]);
}
for(int i = k + 1; i <= n; i++)
for(int j = k + 1; j <= i; j++)
{
dp[i][j] = dp[i][j - 1] + sp3[i][j] - sp3[i - k][j - k] - sp2[i][j - k] + sp2[i - k][j - k];
res = min(res, dp[i][j]);
}
res = -res;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
res += v[i][j];
fout << res;
}