제출 #1347149

#제출 시각아이디문제언어결과실행 시간메모리
1347149nicolo_010Wombats (IOI13_wombats)C++20
12 / 100
82 ms20020 KiB
#include "wombats.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;

int v[5000][200], h[5000][200];
int ans[101][101];
int n, m;

void init(int R, int C, int H[5000][200], int V[5000][200]) {
    n = R;
    m = C;
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            v[i][j] = V[i][j];
            h[i][j] = H[i][j];
        }
    }
    memset(ans, -1, sizeof(ans));
}

void changeH(int P, int Q, int W) {
    h[P][Q] = W;
}

void changeV(int P, int Q, int W) {
    v[P][Q] = W;
}

int dp[5000][200];

int escape(int V1, int V2) {
    if (ans[V1][V2] != -1) return ans[V1][V2];
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            dp[i][j] = 1e9;
        }
    }
    dp[0][V1] = 0;
    int sm=0;
    for (int i=V1; i<m; i++) {
        dp[0][i] = sm;
        if (i<m-1) sm += h[0][i];
    }
    sm=0;
    for (int i=V1-1; i>=0; i--) {
        sm += h[0][i];
        dp[0][i] = sm;
    }
    for (int i=1; i<n; i++) {
        for (int j=0; j<m; j++) {
            int dis=0;
            for (int k=j; k<m; k++) {
                dp[i][j] = min(dp[i][j], dp[i-1][k]+v[i-1][k]+dis);
                if (j<m-1) dis += h[i][k];
            }
            dis=0;
            for (int k=j-1; k>=0; k--) {
                dis += h[i][k];
                dp[i][j] = min(dp[i][j], dp[i-1][k]+v[i-1][k]+dis);
            }
        }
    }
    ans[V1][V2] = dp[n-1][V2];
    return dp[n-1][V2];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...