刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

猴子摘桃子

题目描述:

果园有M行N列套数,每棵书上有一定数量的桃子。猴子从左上角的桃树开始进入果园摘桃子,每到一个桃树下都会将树上的桃子摘完,但猴子每次只能移动到当前所在桃树的下边或右边的桃树下摘桃子,照这个移动方案,猴子在果园中最多可以摘到多少桃子。

现给出M和N的值,以及每棵桃树上的桃子数量,照移动方案,计算出猴子在果园最多可以摘到多少桃子。

例如:M=2 ,N=3 

桃子数量为 

2 3 1

1 4 2

这种情况下,为了摘到最多的桃子,猴子摘桃子的顺序应为2,3,4,2,总桃子数为11。

输入描述:

第一行输入正整数 M和N,分别代表行数和列数 。

之后输入M行N列每课桃树上的桃子数量。

输出描述:

一个正整数,代表猴子按移动规则在果园中最多可以摘到多少桃子。


输入样例:

2 3
2 3 1
1 4 2

输出样例:

11

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythondef max_peaches(M, N, peaches):# 初始化动态规划数组dp = [[0] * (N + 1) for _ in range(M + 1)]# 初始化第一行和第一列for i in range(1, M + 1):dp[i][1] = dp[i - 1][1] + peaches[i - 1][0]for j in range(1, N + 1):dp[1][j] = dp[1][j - 1] + peaches[0][j - 1]# 填充动态规划数组for i in range(2, M + 1):for j in range(2, N + 1):dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + peaches[i - 1][j - 1]# 返回右下角元素return dp[M][N]# 输入M, N = map(int, input().split())peaches = []for _ in range(M):row = list(map(int, input().split()))peaches.append(row)# 输出print(max_peaches(M, N, peaches))```

解析:

【喵呜刷题小喵解析】:

这是一个经典的动态规划问题。首先,我们定义一个二维数组 `dp`,其中 `dp[i][j]` 表示从第一行第一列开始,到第 `i` 行第 `j` 列的桃树所能摘到的最大桃子数。

对于第一行和第一列,猴子只能向右或向下移动,所以 `dp[i][1]` 等于 `dp[i-1][1]` 加上当前桃树上的桃子数,`dp[1][j]` 等于 `dp[1][j-1]` 加上当前桃树上的桃子数。

对于其他位置,猴子可以选择向上或向左移动,所以 `dp[i][j]` 等于 `dp[i-1][j]` 和 `dp[i][j-1]` 中的较大值,再加上当前桃树上的桃子数。

最后,返回 `dp[M][N]`,即右下角位置的值,即为猴子在果园中最多可以摘到的桃子数。
创作类型:
原创

本文链接:猴子摘桃子 题目描述: 果园有M行N列套数,每棵书上有一定数量的桃子。猴子从左上角的桃树开始进入果园

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share