代码
#include <bits/stdc++.h>
using namespace std;
int maxi, maxj, nowi, nowj;
int p[20][20] = { 0 };
void findmax(int M, int N) {
int maxx = 0;
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
if (p[i][j] > maxx) {
maxx = p[i][j];
maxi = i;maxj = j;
}
}
int main() {
int M, N, K, peanut = 0;
cin >> M >> N >> K;
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
cin >> p[i][j];
K -= 1;
findmax(M, N);
if (K >= (1+maxi+1+maxi+1)) { // 时间足够
K -= maxi + 2;
peanut += p[maxi][maxj];
//cout << "采摘了位于p[" << maxi << "][" << maxj << "]的花生,共" << p[maxi][maxj] << "个!剩余时间" << K << endl;
p[maxi][maxj] = 0;
}
else {
cout << peanut;
return 0;
}
while (true) {
findmax(M, N);
if (K >= (abs(maxi - nowi) + abs(maxj - nowj) + (maxi + 1))) { // 时间足够
K -= abs(maxi - nowi) + abs(maxj - nowj) + 1;
peanut += p[maxi][maxj];
nowi = maxi;nowj = maxj;
//cout << "采摘了位于p[" << maxi << "][" << maxj << "]的花生,共" << p[maxi][maxj] << "个!剩余时间" << K << endl;
p[maxi][maxj] = 0;
}
else break; // 时间不够了
}
cout << peanut;
return 0;
}