你需要爬上一个 n 层的楼梯,在爬楼梯过程中, 每阶楼梯需花费非负代价,第i阶楼梯花费代价表示为 cost[i] , 一旦你付出了代价,你可以在该阶基础上往上爬一阶或两阶。
你可以从第 0 阶或者 第 1 阶开始,请找到到达顶层的最小的代价是多少。
n 和 cost[i] 皆为整数
数据范围:
, 
输入为一串半角逗号分割的整数,对应cost数组,例如
10,15,20
输出一个整数,表示花费的最小代价
1,100,1,1,1,100,1,1,100,1
6
import sys
L = list(map(int, sys.stdin.readline().strip().split(',')))
if len(L)<=2:
print(min(L))
else:
dp = [0]*len(L)
for i in range(2, len(L)):
dp[i] = min(dp[i-1]+L[i-1], dp[i-2]+L[i-2])
print(min(dp[-1]+L[-1], dp[-2]+L[-2])) 动态规划
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
其中dp[0]=dp[1]=0;
import sys
words = sys.stdin.readline()
words = words.strip()
words = words.split(',')
costs = [int(x) for x in words]
dp=[None]*(len(words)+1)
if len(costs)<3:
print(1)
exit()
dp[0]=dp[1]=0
for i in range(2,len(words)+1):
dp[i] = min(dp[i-1]+costs[i-1],dp[i-2]+costs[i-2])
print(dp[-1])
"""
台阶问题,考虑动态规划
设dp[i]为到达第i层的最小花费,
dp[i] = min(dp[i - 1], dp[i - 2]) + a[i]
"""
if __name__ == "__main__":
a = list(map(int, input().strip().split(',')))
a.append(0)
dp = [a[0], a[1]]
for i in range(2, len(a)):
dp.append(min(dp[i - 1], dp[i - 2]) + a[i])
print(dp[-1])