// 定义木板的大小
// 定义硬币分布
int board[N][M] = {
{0, 1, 0, 2, 0},
{1, 0, 1, 0, 3},
{0, 2, 0, 4, 0},
{3, 0, 2, 0, 1}
};
// 定义二维数组用于存储最大硬币数目
int maxCoins[N][M];
// 计算机器人能找到的最大硬币数
int findMaxCoins() {
// 初始化第一行和第一列
maxCoins[0][0] = board[0][0];
for (int i = 1; i < N; i++) {
maxCoins[i][0] = maxCoins[i - 1][0] + board[i][0];
}
for (int j = 1; j < M; j++) {
maxCoins[0][j] = maxCoins[0][j - 1] + board[0][j];
}
// 动态规划,计算每个位置的最大硬币数
for (int i = 1; i < N; i++) {
for (int j = 1; j < M; j++) {
maxCoins[i][j] = board[i][j] + ((maxCoins[i - 1][j] > maxCoins[i][j - 1]) ? maxCoins[i - 1][j] : maxCoins[i][j - 1]);
}
}
// 返回右下角位置的最大硬币数
return maxCoins[N - 1][M - 1];
}
// 输出机器人路径
void printRobotPath() {
printf("Robot Path:\n");
int i = N - 1, j = M - 1;
while (i > 0 || j > 0) {
printf("(%d, %d) -> ", i, j);
if (i > 0 && j > 0) {
if (maxCoins[i - 1][j] > maxCoins[i][j - 1]) {
i--;
} else {
j--;
}
} else if (i > 0) {
i--;
} else {
j--;
}
}
printf("(0, 0)\n");
}
int main() {
int maxCoinsFound = findMaxCoins();
printf("Maximum Coins Collected: %d\n", maxCoinsFound);
printRobotPath();
return 0;
}