Submission #768647

# Submission time Handle Problem Language Result Execution time Memory
768647 2023-06-28T10:30:04 Z boris_mihov Wombats (IOI13_wombats) C++17
27 / 100
534 ms 18204 KB
#include "wombats.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

typedef long long llong;
const int MAXR = 5000 + 10;
const int MAXC = 100 + 10;
const int INF  = 2e9;

int r, c;
int costLeft[MAXR][MAXC];
int costDown[MAXR][MAXC];
int dp[MAXC][MAXR][MAXC];
int prefix[MAXR];
int suffix[MAXR];

void calcDP()
{
    for (int end = 1 ; end <= c ; ++end)
    {
        int sum = 0;
        for (int col = end - 1 ; col >= 1 ; col--)
        {
            sum += costLeft[r][col];
            dp[end][r][col] = sum;
        }

        for (int col = end + 1 ; col <= c ; col++)
        {
            sum += costLeft[r][col - 1];
            dp[end][r][col] = sum;
        }

        for (int row = r - 1 ; row >= 1 ; --row)
        {
            prefix[0] = suffix[c + 1] = INF;
            for (int col = 1 ; col <= c ; ++col)
            {
                prefix[col] = std::min(prefix[col - 1] + costLeft[row][col - 1], dp[end][row + 1][col] + costDown[row][col]);
            }

            for (int col = c ; col >= 1 ; --col)
            {
                suffix[col] = std::min(suffix[col + 1] + costLeft[row][col], dp[end][row + 1][col] + costDown[row][col]);
            }

            for (int col = 1 ; col <= c ; ++col)
            {
                dp[end][row][col] = std::min(prefix[col], suffix[col]);
            }
        }
    }
}

void init(int R, int C, int H[5000][200], int V[5000][200]) 
{
    r = R;
    c = C;

    for (int i = 1 ; i <= r ; ++i)
    {
        for (int j = 1 ; j < c ; ++j)
        {
            costLeft[i][j] = H[i - 1][j - 1];
        }
    }

    for (int i = 1 ; i < r ; ++i)
    {
        for (int j = 1 ; j <= c ; ++j)
        {
            costDown[i][j] = V[i - 1][j - 1];
        }
    }

    calcDP();
}

void changeH(int P, int Q, int W)
{
    costLeft[P + 1][Q + 1] = W;
    calcDP();
}

void changeV(int P, int Q, int W) 
{
    costDown[P + 1][Q + 1] = W;
    calcDP();
}

int escape(int V1, int V2)
{
    V1++;
    V2++;
    return dp[V2][1][V1];
}

Compilation message

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   15 |  int res;
      |      ^~~
# Verdict Execution time Memory Grader output
1 Correct 21 ms 8532 KB Output is correct
2 Correct 21 ms 8532 KB Output is correct
3 Correct 83 ms 11332 KB Output is correct
4 Correct 22 ms 8592 KB Output is correct
5 Correct 22 ms 8532 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 312 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 312 KB Output is correct
4 Incorrect 1 ms 724 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 534 ms 5712 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 62 ms 16844 KB Output is correct
2 Correct 57 ms 16724 KB Output is correct
3 Correct 65 ms 16848 KB Output is correct
4 Correct 84 ms 18204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 533 ms 5720 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 530 ms 5716 KB Output isn't correct
2 Halted 0 ms 0 KB -