Pagini recente » Cod sursa (job #2690580) | Cod sursa (job #2388832) | Cod sursa (job #3197014) | Cod sursa (job #1034092) | Cod sursa (job #636929)
Cod sursa(job #636929)
#include <algorithm>
#include <iostream>
#include <fstream>
#include <stdio.h>
#define MAX 1024
using namespace std;
int sumT[MAX], sumDiag[MAX];;
int a[MAX][MAX], sumC[MAX][MAX], sumD[MAX][MAX], sumP[MAX][MAX];
int n, k, maxGs;
int main()
{
ifstream cin("ferma2.in");
ofstream cout("ferma2.out");
cin >> n >> k;
k = n - k;
for (int i = 1; i <= n; i++)
{
sumT[i] = sumT[i - 1];
for (int j = 1; j <= i; j++)
{
cin >> a[i][j];
sumT[i] += a[i][j];
}
for (int j = 1; j <= n; j++)
{
sumC[i][j] = sumC[i - 1][j] + sumC[i][j - 1] - sumC[i - 1][j - 1] + a[i][j];
if (i >= j)
{
sumDiag[i - j] += a[i][j];
sumP[i][j] = sumP[i - 1][j] + sumDiag[i - j];
}
}
for (int j = i; j; j--)
sumD[i][j] = sumD[i - 1][j - 1] + sumD[i][j + 1] - sumD[i - 1][j] + a[i][j];
sumD[i][0] = sumD[i][1];
}
for (int st = k; st <= n; st++)
for (int i = 1; i + k <= st + 1; i++)
maxGs = max(maxGs, sumT[n] - (sumT[st] - sumC[st][i - 1] - sumD[st][i + k] + ((st >= k + 1)? sumP[st - k - 1][i - 1] : 0)));
cout << maxGs;
return 0;
}