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