Pagini recente » Cod sursa (job #2713832) | Cod sursa (job #1774916) | Cod sursa (job #2902337) | Cod sursa (job #2985417) | Cod sursa (job #1779636)
#include <bits/stdc++.h>
#define NMax 1001
#define INF 0x3f3f3f3f
using namespace std;
ifstream f("ferma2.in");
ofstream g("ferma2.out");
int n,w,s,ans;
int a[NMax][NMax];
int up[NMax][NMax],down[NMax][NMax],diag[NMax][NMax];
int main()
{
f >> n >> w;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= i; ++j){
f >> a[i][j];
s += a[i][j];
if(i == j)
up[i][j] = up[i][j - 1] + a[i][j];
else
up[i][j] = up[i - 1][j] + up[i][j - 1] - up[i - 1][j - 1] + a[i][j];
diag[i][j] = diag[i - 1][j - 1] + a[i][j] + diag[i - 1][j] - diag[i - 2][j - 1];
}
}
for(int i = n; i >= 1; --i){
for(int j = 1; j <= i; ++j){
down[i][j] = down[i + 1][j] + down[i][j - 1] - down[i + 1][j - 1] + a[i][j];
}
}
int dim = n - w;
for(int i = 1; i <= n - dim + 1; ++i){
for(int j = 1; j <= i; ++j){
ans = max(ans,up[i + dim - 1][j - 1] + down[i + dim][j + dim - 1] + (s - up[n][j + dim - 1])
+ diag[i][j + 1] - diag[i - 2][j - 1]);
}
}
g << ans << '\n';
return 0;
}