제출 #197579

#제출 시각아이디문제언어결과실행 시간메모리
197579GSmerchMaxcomp (info1cup18_maxcomp)C++14
100 / 100
191 ms52088 KiB
#include <bits/stdc++.h>

typedef long long ll;
typedef long double ld;


using namespace std;

#define fi first
#define se second
#define sz(x) (x).size()
#define pll pair<ll,ll >
#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define endln '\n'
#define cont continue

const ll MaxN = 1e3 + 100;
const ll LogN = 20;
ll Inf = 1e18;
const ll dx[4] = { 0,1,0,-1 };
const ll dy[4] = { 1,0,-1,0 };

bool used[MaxN][MaxN];
ll Mt[MaxN][MaxN];
ll dp[4][MaxN][MaxN];

int main() {

#ifdef LOCAL
    ifstream cin("input.txt");
    ofstream cout("output.txt");
#else
    //ifstream cin("points.in");
    //ofstream cout("points.out");
#endif
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    ll N, M;
    cin>>N>>M;
    for(int i = 0;i<N;i++){
        for(int j =0;j<M;j++){
            cin>>Mt[i][j];
        }
    }
    dp[0][0][0] = -1;
    for(int i =0;i<N;i++){
        for(int j =0;j<M;j++){
            ll k = -1;
            if(j != 0) k = max(k, Mt[i][j] + dp[0][i][j-1] - Mt[i][j-1] -1);
            if(i != 0) k = max(k, Mt[i][j] + dp[0][i-1][j] - Mt[i-1][j] -1);
            dp[0][i][j] = k;
        }
    }
    dp[1][N-1][0] = -1;
    for(int i =N-1;i>=0;i--){
        for(int j =0;j<M;j++){
            ll k = -1;
            if(j != 0) k = max(k, Mt[i][j] + dp[1][i][j-1] - Mt[i][j-1] -1);
            if(i != N-1) k = max(k, Mt[i][j] + dp[1][i+1][j] - Mt[i+1][j] -1);
            dp[1][i][j] = k;
        }
    }
    dp[2][0][M-1] = -1;
    for(int i =0;i<N;i++){
        for(int j =M-1; j>= 0;j--){
            ll k = -1;
            if(j != M-1) k = max(k, Mt[i][j] + dp[2][i][j+1] - Mt[i][j+1] -1);
            if(i != 0) k = max(k, Mt[i][j] + dp[2][i-1][j] - Mt[i-1][j] -1);
            dp[2][i][j] = k;
        }
    }
    dp[3][N-1][M-1] = -1;
    for(int i =N-1;i>=0;i--){
        for(int j =M-1;j>=0;j--){
            ll k = -1;
            if(j != M-1) k = max(k, Mt[i][j] + dp[3][i][j+1] - Mt[i][j+1] -1);
            if(i != N-1) k = max(k, Mt[i][j] + dp[3][i+1][j] - Mt[i+1][j] -1);
            dp[3][i][j] = k;
        }
    }
    ll Ans = -1;
    for(int i =0;i<N;i++){
        for(int j =0;j<M;j++){
            for(int k =0;k<4;k++){
                Ans = max(Ans, dp[k][i][j]);
            }
        }
    }
    cout<<Ans;

    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...