Pagini recente » Cod sursa (job #2871860) | Cod sursa (job #2791964) | Cod sursa (job #2691610) | Cod sursa (job #2689031) | Cod sursa (job #1953237)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ferma2.in");
ofstream g("ferma2.out");
const int NMax = 1003;
int n,k;
int a[NMax][NMax],c[NMax][NMax],l[NMax][NMax],d[NMax][NMax],d2[NMax][NMax];
int trian(int i,int j,int lat){
int s = 0;
s += c[n][j - 1];
s += l[i + lat][j];
s += d[i + lat - 1][j + lat];
if(i - 2 >= 1)
s -= d2[i - 2][j - 1];
return s;
}
int main()
{
f >> n >> k;
int lat = n - k;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= i; ++j){
f >> a[i][j];
if(i == j)
c[i][j] = c[i][j - 1] + a[i][j];
else
c[i][j] = c[i - 1][j] + c[i][j - 1] - c[i - 1][j - 1] + a[i][j];
}
}
for(int i = n; i >= 1; --i){
for(int j = i; j >= 1; --j){
if(i == j)
l[i][j] = l[i + 1][j] + a[i][j];
else
l[i][j] = l[i + 1][j] + l[i][j + 1] - l[i + 1][j + 1] + a[i][j];
}
}
for(int i = 1; i <= n; ++i){
for(int j = i; j >= 1; --j){
if(i == j)
d[i][j] = d[i - 1][j - 1] + a[i][j];
else{
if(j == 1){
d[i][j] = d[i][j + 1] + a[i][j];
}else
d[i][j] = d[i][j + 1] + d[i - 1][j - 1] - d[i - 1][j] + a[i][j];
}
}
}
for(int i = 1; i <= n; ++i){
int start = i;
for(int j = 1; j <= n - i + 1; ++j){
if(j == 1){
d2[start][j] = d2[start - 1][j] + a[start][j];
}else{
d2[start][j] = d2[start - 1][j - 1] + d2[start - 1][j] - d2[start - 2][j - 1] + a[start][j];
}
start++;
}
}
int ans = 0;
for(int i = 1; i <= n - lat + 1; ++i){
for(int j = 1; j <= i; ++j){
ans = max(ans,trian(i,j,lat));
}
}
g << ans << '\n';
return 0;
}