Pagini recente » Cod sursa (job #176721) | Cod sursa (job #1749562) | Cod sursa (job #1596568) | Cod sursa (job #255640) | Cod sursa (job #637598)
Cod sursa(job #637598)
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1005;
int i , j , A[maxn][maxn] , oriz[maxn][maxn] , vert[maxn][maxn] , diag[maxn][maxn] , vf[maxn][maxn], Sum;
int n , k;
int main()
{
freopen("ferma2.in","r",stdin);
freopen("ferma2.out","w",stdout);
scanf("%d %d",&n,&k);
for ( i = 1 ; i <= n ; ++i )
for ( j = 1 ; j <= i ; ++j ) {
scanf("%d",&A[i][j]),
oriz[i][j] = oriz[i][j - 1] + A[i][j],
vert[i][j] = vert[i - 1][j] + A[i][j],
diag[i][j] = diag[i - 1][j - 1] + A[i][j];
Sum += A[i][j];
}
int l = n - k;
for ( i = 1 ; i <= l ; ++i )
for ( j = 1 ; j <= i ; ++j )
vf[1][1] += A[i][j];
int ans = vf[1][1];
for ( i = 2 ; i <= n - l + 1 ; ++i ) {
vf[i][1] = vf[i - 1][1] - diag[i - 1 + l - 1][l] + oriz[i + l - 1][l];
ans = min ( ans , vf[i][1] );
for ( j = 2 ; j <= i ; ++j ) {
vf[i][j] = vf[i][j - 1] - (vert[i + l - 1][j - 1] - vert[i - 1][j - 1]) + (diag[i + l - 1][j + l - 1] - diag[i - 1][j - 1]);
ans = min ( ans , vf[i][j] );
}
}
printf("%d\n", Sum - ans);
return 0;
}