Pagini recente » Cod sursa (job #1304820) | Cod sursa (job #828951) | Cod sursa (job #2267074) | Cod sursa (job #2140498) | Cod sursa (job #2900090)
#include <stdio.h>
#define MAXN 1002
#define LIN 0
#define COL 1
static inline int min( const int& a, const int& b ) {
return ( a <= b ? a : b );
}
int sum[ 2 ][ MAXN ][ MAXN ];
int dp[ MAXN ][ MAXN ];
int n, k, x;
int S;
int suma( int lin, int col, const int POZ ) {
if( lin > 0 && col > 0 )
return sum[ POZ ][ lin ][ col ];
else return 0;
}
int main()
{
FILE *fin = fopen( "ferma2.in", "r" );
fscanf( fin, "%d %d", &n, &k );
for( int l = 1; l <= n; l++ )
for( int c = 1; c <= l; c++ ) {
fscanf( fin, "%d", &x );
sum[ LIN ][ l ][ c ] += sum[ LIN ][ l ][ c - 1 ] + x;
sum[ COL ][ l ][ c ] += sum[ COL ][ l - 1 ][ c ] + x;
S += x;
}
fclose( fin );
int N = n - k;
for( int l = 1; l <= n; l++ )
for( int c = 1; c <= l; c++ )
dp[ l ][ c ] = dp[ l - 1 ][ c - 1 ] + suma( l, c, LIN ) - suma( l, c - N, LIN ) - suma( l - 1, c - N, COL ) + suma( l - N - 1, c - N, COL );
int minn = dp[ n ][ n ];
for( int l = N; l <= n; l++ )
for( int c = N; c <= l; c++ )
minn = min( minn, dp[ l ][ c ] );
S -= minn;
FILE *fout = fopen( "ferma2.out", "w" );
fprintf( fout, "%d\n", S );
fclose( fout );
return 0;
}