Pagini recente » Cod sursa (job #1741680) | Cod sursa (job #2583979) | Rating Tufis Alexandru (AlexTufis) | Cod sursa (job #1798718) | Cod sursa (job #636246)
Cod sursa(job #636246)
#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;
}