85172024-01-20 07:38:03MagyarKendeSZLGDinamitcpp17Elfogadva 50/506ms4456 KiB

#include <bits/stdc++.h>

#pragma region Utility

#define speed cin.tie(0); ios::sync_with_stdio(0)
#define cinv(v) for (auto& e : v) cin >> e;

#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define size(v) (int)v.size()
#define has(s, e) s.count(e)

#define max_index(v) max_element(all(v)) - v.begin()
#define min_index(v) min_element(all(v)) - v.begin()
#define smax(x, y) x = max(x, y)
#define smin(x, y) x = min(x, y)

#define sum(v) accumulate(all(v), 0)
#define product(v, T) accumulate(all(v), 1, multiplies<T>())

using namespace std;
using ll = long long;
using point = array<int, 2>;

int max(point p) { return max(p[0], p[1]); }
int min(point p) { return min(p[0], p[1]); }

template <typename T>
vector<T> prefix_sum(const vector<T>& v) {
    vector<T> result(size(v));
    partial_sum(all(v), result.begin());
    return result;
}

#pragma endregion

int main() {
    speed;

    int N, M, K;
    cin >> N >> M >> K;

    vector<vector<int>> grid(N + 1, vector<int>(M + 1));
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            cin >> grid[i][j];
        }
    }

    vector<vector<vector<int>>> dp(N + 1, vector<vector<int>>(M + 1, vector<int>(K + 1, 1e9)));

    dp[1][1][0] = grid[1][1];

    for (int dc = 1; dc <= K; dc++) {
        dp[1][1][dc] = dp[1][1][dc - 1] / 2;
    }

    for (int y = 1; y <= N; y++) {
        for (int x = 1; x <= M; x++) {
            for (int dx = 0; dx <= K; dx++) {
                for (int dt = 0; dt <= dx; dt++) {

                    smin(
                        dp[y][x][dx],
                        (grid[y][x] >> dt) + // dt-szer elosztjuk kettővel a jelenlegi magasságot
                        min( // a legkisebb kellemetlenség eddig legfeljebb dx - dt felhasználásával
                            dp[y - 1][x][dx - dt],
                            dp[y][x - 1][dx - dt]
                        )
                    );
                }
            }
        }
    }

    cout << dp[N][M][K];
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/03ms1828 KiB
2Elfogadva0/06ms2740 KiB
3Elfogadva2/23ms2516 KiB
4Elfogadva2/23ms2720 KiB
5Elfogadva3/33ms2980 KiB
6Elfogadva3/33ms2968 KiB
7Elfogadva2/26ms3808 KiB
8Elfogadva3/36ms3488 KiB
9Elfogadva2/23ms3232 KiB
10Elfogadva2/23ms3192 KiB
11Elfogadva3/33ms3384 KiB
12Elfogadva3/33ms3460 KiB
13Elfogadva2/23ms3536 KiB
14Elfogadva3/33ms3788 KiB
15Elfogadva2/26ms4396 KiB
16Elfogadva3/36ms4376 KiB
17Elfogadva2/26ms4272 KiB
18Elfogadva3/36ms4284 KiB
19Elfogadva2/26ms4296 KiB
20Elfogadva3/36ms4312 KiB
21Elfogadva2/26ms4452 KiB
22Elfogadva3/36ms4456 KiB