允许两个回溯步骤的硬币收集器问题

2024-05-29 02:19:44 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个硬币收藏家的问题,几个硬币被放置在一个矩阵的一个单元中,这个矩阵的尺寸是nxm。每个单元格上有不同数量的硬币。矩阵左上角单元格中的人(意思是0,0),他必须收集尽可能多的硬币,但他只能移动到他右边的单元格(i,j+1)或下方的单元格(i+1,j),任务是用尽可能多的硬币到达单元格(n,m)

我知道这个问题的解决方案可以通过使用动态规划和 设置重现期

F(0,0) = F(0,0)

F(0,j) = F(0,j) + F(0,j-1) for 1<=j<=m 

F(i,0) = F(i,0) + F(i-1,0) for 1<=i<=n

F(i,j) = F(i,j) + max(F(i-1,j) + F(i,j-1))  for 1<=i<=n, 1<=j<=m 

我们迭代所有的单元格,然后得到F(n,m)处的值

我忘了提到这一点,但我们知道每个单元格中有多少硬币。所以我们不需要通过旅行来发现这些信息

然而,现在的情况是,男子可以倒退两步,这两步在两个不同的点上分别作为一步,或者在一个点上作为一个大步。也就是说,在沿路的某个地方,他可以向前或向下,在那个牢房里收集硬币,然后再向后走。我将如何进行建模?正确的方法是什么?我不一定对实现这项工作所需的代码感兴趣,就像我对正确的理论或方法感兴趣一样,也就是说,我不介意阅读任何语言的代码

提前谢谢


Tags: 方法代码for数量尺寸动态矩阵硬币

热门问题