我目前正致力于递归,并且我一直在坚持这个问题:
使用递归查找数组中最便宜的路径。例如,如果我有一个数组[0,1,3,4,1]我从值0开始。现在我有2个选项我可以跳转到索引2或只是移动到索引1.在这种情况下我会跳索引2(值3)然后跳转到索引4(值1),因为3 + 1 = 4,这将是通过数组最便宜的方式。
我试图将移动索引值与跳转索引值进行比较并查看哪个最小但在这种情况下不起作用,因为如果我将移动值(1)与跳转值(3)进行比较,则1最小而且我的程序会把它作为正确的路径,而实际上它不是,而3是更好的选择。
感谢您抽出宝贵时间提供帮助!
答案 0 :(得分:1)
你可以使用动态编程来解决这个问题。让我们说我们创建一个数组dp,其中dp [i]表示在位置i到达的最小成本。 我们可以使用以下命令将此数组填充到输入大小:
for(i=1;i<=len;i++)
//we can reach at current position either by i-1 or by i-2
//choose one which gives minimum cost and +arr[i] cost of current position
dp[i] = min(dp[i-1],dp[i-2])+arr[i]
我们可以通过前一个位置通过一次移动到达第i个位置,或者通过i-2跳过2.这样你可以找到到达最终位置的最低成本。所以dp [len]将是您到达最后位置的最低费用。 有一个类似的问题here