Pagini recente » Cod sursa (job #667520) | Cod sursa (job #2143900) | Cod sursa (job #1265349) | Cod sursa (job #371643) | Cod sursa (job #638583)
Cod sursa(job #638583)
#include <fstream>
using namespace std;
const int NMAX = 1001;
int N, K, a[NMAX][NMAX], sv[NMAX][NMAX], sh[NMAX][NMAX], sd[NMAX][NMAX];
int main()
{
ifstream fin("ferma2.in");
ofstream fout("ferma2.out");
fin>>N>>K;
for (int i=1;i<=N;++i)
for (int j=1;j<=i;++j)
fin>>a[i][j];
int total = 0, ans = 0;
for (int i=1;i<=N;++i)
for (int j=1;j<=i;++j)
{
sh[i][j] = sh[i][j-1] + a[i][j];
sv[i][j] = sv[i-1][j] + a[i][j];
sd[i][j] = sd[i-1][j-1] + a[i][j];
total += a[i][j];
}
//fprintf(stderr, "total: %d\n", total);
int k = N - K;
int current = 0;
for (int i = 1;i<=k;++i)
for (int j=1;j<=i;++j)
current += a[i][j];
//fprintf(stderr, "%d\n", current);
ans = max(ans, total - current);
for (int i = k+1;i <= N;++i)
{
current -= sd[i-1][k];
current += sh[i][k];
//fprintf(stderr, "%d\n", current);
ans = max(ans, total - current);
int copy = current;
for (int j=2;j+k-1 <= i;++j)
{
current -= sv[i][j-1] - sv[i-k][j-1];
current += sd[i][j+k-1] -sd[i-k][j-1];
//fprintf(stderr, "%d\n", current);
ans = max(ans, total - current);
}
current = copy;
}
fout<<ans<<"\n";
return 0;
}