解题思路:

阅读理解题,从题中可以发现整个过程是固定的,因此直接模拟即可。

  • 从初始状态开始,每次判断采摘下一位置的花生的时间是否够用
    • 如果够用,则采摘下一最大值;
    • 如果不够用,则停止;

C++ 代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
 
typedef pair <int, int> PII; const int N = 30;
 
int n, m, k;
int g[N][N];
 
PII get_max()
{
    PII r = { 0, 0 };
 
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            if (g[r.first][r.second] < g[i][j])
                r = {
                    i, j
                };
 
    return r;
}
 
int main()
{
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> g[i][j];
 
    auto t = get_max();
    if (t.first * 2 + 1 > k) puts("0");
    else
    {
        int res = g[t.first][t.second];
        k -= t.first + 1;
        g[t.first][t.second] = 0;
 
        while (true)
        {
            auto r = get_max();
            int d = abs(r.first - t.first) + abs(r.second - t.second);
 
            if (d + r.first + 1 > k) break;
            if (!g[r.first][r.second]) break;
            res += g[r.first][r.second];
            g[r.first][r.second] = 0;
            k -= d + 1;
            t = r;
        }
 
        printf("%d\n", res);
    }
 
    return 0;
}


另外,牛客暑期NOIP真题班限时免费报名
报名链接:https://www.nowcoder.com/courses/cover/live/248
报名优惠券:DCYxdCJ