你需要爬上一个 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])