Python 简单动态规划问题的递推解法

Python 简单动态规划问题的递推解法,python,algorithm,dynamic-programming,Python,Algorithm,Dynamic Programming,我试图解决这个问题: 塞拉萨是一名护士。她想给住院的病人一些药片 她的做法。所有的病人排成一行,每个人都有一个座位 根据他或她的健康评分对分数进行评分。塞拉萨想 每位患者至少服用1片。病人嫉妒他们的健康 近邻,所以如果两个病人坐在一起 评级较高的人必须得到更多的药片。塞拉萨想 省钱,所以她想尽量减少平板电脑的总数 输入的第一行输入是一个整数N,数字为 Therasa诊所的患者。以下N行中的每一行都包含 整数表示每个患者的健康得分 输出包含最小药片数的单行 塞拉萨必须付出 约束1在最后一部分(在反

我试图解决这个问题:

塞拉萨是一名护士。她想给住院的病人一些药片 她的做法。所有的病人排成一行,每个人都有一个座位 根据他或她的健康评分对分数进行评分。塞拉萨想 每位患者至少服用1片。病人嫉妒他们的健康 近邻,所以如果两个病人坐在一起 评级较高的人必须得到更多的药片。塞拉萨想 省钱,所以她想尽量减少平板电脑的总数

输入的第一行输入是一个整数N,数字为 Therasa诊所的患者。以下N行中的每一行都包含 整数表示每个患者的健康得分

输出包含最小药片数的单行 塞拉萨必须付出

约束1在最后一部分(在反向遍历时),您有一个小错误:

for i in range(len(h)-2, -1, -1):
    if h[i]>=h[i+1] and dp[i]<=dp[i+1]:
        dp[i] = dp[i+1]
有了这些:

dp  = [1] * len(h)

for i in range(1, len(h)):
    if h[i] > h[i-1]:
        dp[i] = dp[i-1] + 1
因为我们知道每个患者至少会得到一片

更新:以下是第一个代码失败的示例:
h=[10,10,1]
您的代码将计算dp=[1,1,1]

for i in range(len(h)-2, -1, -1):
    if h[i]>h[i+1] and dp[i]<=dp[i+1]:
        dp[i] = dp[i+1] + 1
dp  = [0] * len(h)
dp[0] = 1

for i in range(1, len(h)):
    if h[i] > h[i-1]:
        dp[i] = dp[i-1] + 1
    else:
        dp[i] = 1 
dp  = [1] * len(h)

for i in range(1, len(h)):
    if h[i] > h[i-1]:
        dp[i] = dp[i-1] + 1