【发布时间】:2019-05-10 09:52:03
【问题描述】:
说明:老鼠可以向上或向右移动
输入:
- 第一行包含桌子大小 n 的数量和奶酪的数量 m。
- 从下一行开始,给出奶酪的 x、y 位置
输出:
- 最多吃多少奶酪
示例 1:
- 输入:
1 1 1 - 输出:
1 1
示例 2:
- 输入:
3 2
1 2
3 1
- 输出:
1
示例 3:
- 输入:
5 5
2 3
3 2
4 3
4 5
5 2
- 输出:
3
如何用 python 解决? 我试过了
def maxAverageOfPath(table, N):
dp = [[0 for i in range(N)] for j in range(N)]
dp[0][0] = table[0][0]
# Initialize first column of total table(dp) array
for i in range(0, N):
dp[i][0] = 0
for j in range(0, N):
dp[0][j] = 0
for i in range(0, N):
for j in range(0, N):
print(i, j)
if i == N-1 and j == N-1:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
continue
if i == N-1 :
dp[i][j] = table[i][j + 1]
continue
if j == N-1 :
dp[i][j] = table[i + 1][j]
continue
dp[i][j] = max(table[i + 1][j], table[i][j + 1])
return dp
但是失败了……
【问题讨论】:
-
嗨。就目前而言,您的问题对我来说很难理解。这部分是由于格式化(尝试更好地格式化输入/输出字段和值),部分是由于问题描述本身。程序应该做什么?有什么限制?最后,尝试评论您的代码,以帮助那些试图帮助您更快理解它的人。它还将帮助他们了解您对代码应该做什么/应该做什么做出错误的假设。
-
使用 bfs 或 dfs 来解决您的问题,从初始点开始,检查左右,如果国际象棋存在将该点存储在该节点中,然后再次按照过程直到到达顶行或超过边界编码,并得到每个 bfs 分支c 中奶酪的总数,最多一个将是答案
-
在动态编程中,您应该从头到尾遍历解决方案,而不是像现在这样从头到尾遍历。这样一来,您始终可以获得所有必需的信息。
-
@VincentvanderWeele,DP 中两种方法都很好。是否使用自上而下或自下而上的方法取决于您。有时这也是一个特定的问题。根据问题陈述,这里自下而上的方法看起来很合适。
-
@DevkinandanChauhan 确实如此,但是您需要记住记住子结果。我认为自下而上更容易掌握,因为你可以从迭代顺序中“免费”获得记忆。
标签: python algorithm dynamic-programming