动态规划方法问题

Dynamic Programming approach issue

爱丽丝每天慢跑N米。有时她 运行s 有时她走路。她的步行速度是 1m/s 而 运行ning 速度是 2m/s 。给定她慢跑的距离,计算她可以慢跑的方式数。

示例:

输入:3(慢跑的总距离)

输出:3(可能的情况)

说明: 爱丽丝可以用 3 种方式慢跑

  1. 爱丽丝步行 3 米
  2. Alice 运行 走 2 米,然后走 1 米
  3. Alice 走了 1m,然后 运行2m

示例 2:

输入:4

输出:5

解释:爱丽丝可以用 5 种方式慢跑

  1. 爱丽丝步行 4 米
  2. 爱丽丝先走 2 米,然后 运行 走 2 米
  3. 爱丽丝可以运行走2米然后走2米
  4. Alice 走 1 米然后 运行 走 2 米然后走 1 米
  5. 爱丽丝运行全部4米

我已经使用下面的代码解决了上面的问题陈述


from itertools import permutations

n = int(input())

c = 0
t = [2]*(n//2)
if n % 2 != 0:
    t = t+[1]

for i in range(t.count(2)):
    c = c+len(set(list(permutations(t, len(t)))))
    t.remove(2)
    t.append(1)
    t.append(1)
c = c+len(set(list(permutations(t, len(t)))))
print(c)

我是动态规划的新手,有人可以帮助我吗?我如何在动态方法中实现这一点并实现更优化的时间复杂度?

非常感谢您对我的问题给予的宝贵意见。

受所有早期帖子的启发,并确认了不成文的假设,这只是另一个 fib-sequence 问题。

感谢所有早期发帖人。 (那么代码就很简单了)仅供参考,希望对你有帮助。

def jogging_ways(n: int) -> int:
    # f(3) = f(1) + f(2)
    a, b = 1, 1
        
    for i in range(n):
        a, b = b, a+b
        #print(a, b)
        
    return a

运行:

> jogging_ways(4)
  5
> jogging_ways(5) 
  8