所以我有一个硬币收藏家的问题,几个硬币被放置在一个矩阵的一个单元中,这个矩阵的尺寸是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)处的值
我忘了提到这一点,但我们知道每个单元格中有多少硬币。所以我们不需要通过旅行来发现这些信息
然而,现在的情况是,男子可以倒退两步,这两步在两个不同的点上分别作为一步,或者在一个点上作为一个大步。也就是说,在沿路的某个地方,他可以向前或向下,在那个牢房里收集硬币,然后再向后走。我将如何进行建模?正确的方法是什么?我不一定对实现这项工作所需的代码感兴趣,就像我对正确的理论或方法感兴趣一样,也就是说,我不介意阅读任何语言的代码
提前谢谢
目前没有回答
相关问题 更多 >
编程相关推荐