BONUS - VOI 2011 Phần thưởng

Tác giả: RR

Ngôn ngữ: C++

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <string>
#include <deque>
#include <complex>

#define FOR(i,a,b) for(int i=(a),_b=(b); i<=_b; i++)
#define FORD(i,a,b) for(int i=(a),_b=(b); i>=_b; i--)
#define REP(i,a) for(int i=0,_a=(a); i<_a; i++)
#define ll long long
#define F first
#define S second
#define PB push_back
#define MP make_pair
using namespace std;

const double PI = acos(-1.0);

int a[1011][1011], s[1011][1011];

int main() {
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    int n, k;
    scanf("%d %d", &n, &k);
    FOR(i,1,n) FOR(j,1,n) scanf("%d", &a[i][j]);
    
    FOR(i,1,n) FOR(j,1,n) s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];
    
    int best = -1000111000;
    
    FOR(i,1,n)
    FOR(j,1,n) {
        int ii = i + k - 1, jj = j + k - 1;
        if (ii > n || jj > n) continue;
        best = max(best, s[ii][jj] - s[ii][j-1] - s[i-1][jj] + s[i-1][j-1]);
    }
    
    printf("%d\n", best);
    return 0;
}

Download