-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy path108.cpp
34 lines (31 loc) · 880 Bytes
/
108.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
dynamic programming > max 2D range sum
difficulty: easy
date: 17/Jan/2020
by: @brpapa
*/
#include <iostream>
#define INF (1 << 30)
using namespace std;
int sumAcc[110][110];
int main() {
int N; cin >> N;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++) {
cin >> sumAcc[i][j];
sumAcc[i][j] = sumAcc[i][j]
+ ((i > 0)? sumAcc[i-1][j] : 0)
+ ((j > 0)? sumAcc[i][j-1] : 0)
- ((i > 0 && j > 0)? sumAcc[i-1][j-1] : 0);
}
int ans = -INF;
for (int l = 0; l < N; l++) for (int c = 0; c < N; c++)
for (int i = l; i < N; i++) for (int j = c; j < N; j++)
ans = max(ans, sumAcc[i][j]
- ((l > 0)? sumAcc[l-1][j] : 0)
- ((c > 0)? sumAcc[i][c-1] : 0)
+ ((l > 0 && c > 0)? sumAcc[l-1][c-1] : 0)
);
cout << ans << endl;
return 0;
}