DP4 最小花费爬楼梯

描述
给定一个整数数组 cost \cost ,其中 cost[i]\cost[i] 是从楼梯第i \i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

数据范围:数组长度满足 1 \le n \le 10^5 \1≤n≤10
5
,数组中的值满足 1 \le cost_i \le 10^4 \1≤cost
i

≤10
4

输入描述:
第一行输入一个正整数 n ,表示数组 cost 的长度。
第二行输入 n 个正整数,表示数组 cost 的值。
输出描述:
输出最低花费
示例1
输入:
3
2 5 20
复制
输出:
5
复制
说明:
你将从下标为1的台阶开始,支付5 ,向上爬两个台阶,到达楼梯顶部。总花费为5
示例2
输入:
10
1 100 1 1 1 90 1 1 80 1
复制
输出:
6
复制
说明:

你将从下标为 0 的台阶开始。
1.支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
2.支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
3.支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
4.支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
5.支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
6.支付 1 ,向上爬一个台阶,到达楼梯顶部。
总花费为 6 。

#include<iostream>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
int main()
{
	int n;
	cin >> n;//10
	vector<int> dt(n);

	for (int i = 0;i < n;i++)
		cin >> dt[i];
		//1 100 1 1 1 90 1 1 80 1
		
	vector<int> cost(n);
	
	cost[0] = 0;cost[1] = 0;
	
	for (int i = 2;i < n;i++){
		cost[i] = min(dt[i - 1] + cost[i - 1],dt[i - 2] + cost[i - 2]);//从0或1开始
		//cost[2]=dt[0] + cost[0]=1+0=1  ;;;dt[i - 2] + cost[i - 2]
		//cost[3]=dt[2] + cost[2]=1+1=2  ;;;dt[i - 1] + cost[i - 1]
		//cost[4]=dt[2] + cost[2]=1+1=2  ;;;dt[i - 2] + cost[i - 2]
		//cost[5]=dt[4] + cost[4]=1+2=3  ;;;dt[i - 1] + cost[i - 1]
		//cost[6]=dt[4] + cost[4]=1+2=3  ;;;dt[i - 2] + cost[i - 2]
		//cost[7]=dt[6] + cost[6]=1+3=4  ;;;dt[i - 2] + cost[i - 2]
		//cost[8]=dt[7] + cost[7]=1+4=5  ;;;dt[i - 1] + cost[i - 1]
		//cost[9]=dt[8] + cost[8]=1+5=5  ;;;dt[i - 1] + cost[i - 1]
	
	}
	int mincost=min(cost[n - 1] + dt[n - 1],cost[n - 2] + dt[n - 2]);
	//cost[n - 1] + dt[n - 1],cost[n - 2] + dt[n - 2]=cost[9]+dt[9],cost[8]+dt[8]
	//cost[9]+dt[9]=5+1=6
	
	cout << mincost;
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不易撞的网名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值