90分#10WA
查看原帖
90分#10WA
1004314
114514jie楼主2023/11/18 11:31

代码

#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;
}

2023/11/18 11:31
加载中...