题解 | 收集金币

收集金币

https://www.nowcoder.com/practice/bde230df252c4b41a059c9b06fcf65b6

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const long long INF = 1e18;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m;
    cin >> n >> m;

    vector<vector<int>> coins(n + 1, vector<int>(m + 1));
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            cin >> coins[i][j];
        }
    }

    int k;
    cin >> k;
    vector<vector<int>> wall_time(n + 1, vector<int>(m + 1, 1e9));
    for (int i = 0; i < k; ++i) {
        int r, c, t;
        cin >> r >> c >> t;
        wall_time[r][c] = t;
    }

    vector<vector<long long>> dp(n + 1, vector<long long>(m + 1, -INF));

    // Base case: (1, 1)
    dp[1][1] = coins[1][1];

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if (i == 1 && j == 1) continue;

            // 检查当前格子是否可达
            int arrival_time = i + j - 2;
            if (arrival_time >= wall_time[i][j]) {
                continue; // 此格子无法进入
            }

            long long from_up = -INF;
            if (i > 1 && dp[i - 1][j] != -INF) {
                from_up = dp[i - 1][j];
            }

            long long from_left = -INF;
            if (j > 1 && dp[i][j - 1] != -INF) {
                from_left = dp[i][j - 1];
            }

            long long prev_max = max(from_up, from_left);
            if (prev_max != -INF) {
                dp[i][j] = prev_max + coins[i][j];
            }
        }
    }

    long long max_coins = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            max_coins = max(max_coins, dp[i][j]);
        }
    }

    cout << max_coins << endl;

    return 0;
}

全部评论
点赞 回复 分享
发布于 昨天 20:16 山东
接好运
点赞 回复 分享
发布于 昨天 20:16 山东
忍耐王
点赞 回复 分享
发布于 昨天 20:16 山东
coins数组下标从1开始?
点赞 回复 分享
发布于 昨天 20:16 山东
代码有注释吗
点赞 回复 分享
发布于 昨天 20:16 山东
dp初始化合理吗
点赞 回复 分享
发布于 昨天 20:16 山东

相关推荐

12-13 12:11
复旦大学 Java
点赞 评论 收藏
分享
很奥的前端仔:如果你接了offer 临时又说不去 hr确实要多做一些工作。 当然如果是接offer之前当我没说
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务