Algorithm 动态规划算法

Algorithm 动态规划算法,algorithm,dynamic-programming,counting,Algorithm,Dynamic Programming,Counting,我正在阅读这本教科书,试图解决一些算法,以提高我的技能,我目前被困在这个问题上: 这一章是关于动态规划的,我真的很难开始这个问题,因为我不知道如何处理这些类型的问题。有谁能帮我解决这个问题,或者给我指出一个类似的现有算法吗?这个问题的解决方案是以下递归公式的解决方案: f(i) = max{ l_i + f(i+k_i) , f(i+1) } f(x) = 0 : for all x > n 这个问题的解决方案是f(1)的解决方案 说明:对于每一天,您可以“跳过”这一天,然后检查第二天

我正在阅读这本教科书,试图解决一些算法,以提高我的技能,我目前被困在这个问题上:


这一章是关于动态规划的,我真的很难开始这个问题,因为我不知道如何处理这些类型的问题。有谁能帮我解决这个问题,或者给我指出一个类似的现有算法吗?

这个问题的解决方案是以下递归公式的解决方案:

f(i) = max{ l_i + f(i+k_i) , f(i+1) }
f(x) = 0 : for all x > n
这个问题的解决方案是
f(1)
的解决方案


说明:对于每一天,您可以“跳过”这一天,然后检查第二天(或第二天之后的那一天,…,这是通过调用
f(i+1)
完成的)-或者吃棒棒糖,然后您可以选择只在
k_i
天后回来-这意味着您添加了
f(i+k_i)的解决方案

通常对于DP,一个有用的第一步是,反直觉地使问题更具体:你能计算出从某一天开始你能得到的最大棒棒糖数量吗?(重要提示:请注意,我说的是“从第一天开始”,而不是“从第一天开始吃那一天的棒棒糖”。即使你从第一天开始,你仍然可以选择等待一天或几天。)称之为f(I)。你能用f()的其他值为f(i)写一个表达式吗?提示:这一定是你在第一天可以做出的最大选择。你需要什么编程语言来解决问题?答案不一定是任何语言。一个算法伪代码解决方案就可以了。