제출 #67037

#제출 시각아이디문제언어결과실행 시간메모리
67037cdemirerMaxcomp (info1cup18_maxcomp)C++17
100 / 100
235 ms39644 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<vii> vvii; typedef vector<vi> vvi; typedef pair<double, double> dodo; #define pb(x) push_back(x) #define mp(x, y) make_pair(x, y) int N, M; int input[3000][3000]; int mat[3000][3000]; int solve() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { mat[i][j] = input[i][j] - (i+j); } } for (int i = N-2; i >= 0; i--) mat[i][M-1] = max(mat[i][M-1], mat[i+1][M-1]); for (int j = M-2; j >= 0; j--) mat[N-1][j] = max(mat[N-1][j], mat[N-1][j+1]); for (int i = N-2; i >= 0; i--) { for (int j = M-2; j >= 0; j--) { mat[i][j] = max( mat[i][j], max(mat[i+1][j], mat[i][j+1]) ); } } int ret = -1; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { ret = max(ret, mat[i][j] - input[i][j] + (i+j) - 1); } } return ret; } int main(int argc, char **argv) { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> M; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> input[i][j]; } } int ans = solve(); for (int i = 0; i < N/2; i++) { for (int j = 0; j < M; j++) { swap(input[i][j], input[N-1-i][j]); } } ans = max(ans, solve()); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { input[i][j] = -input[i][j]; } } ans = max(ans, solve()); for (int i = 0; i < N/2; i++) { for (int j = 0; j < M; j++) { swap(input[i][j], input[N-1-i][j]); } } ans = max(ans, solve()); cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...