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