解题思路:
阅读理解题,从题中可以发现整个过程是固定的,因此直接模拟即可。
- 从初始状态开始,每次判断采摘下一位置的花生的时间是否够用
- 如果够用,则采摘下一最大值;
- 如果不够用,则停止;
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; }