首页 > 其他分享 >最小花费上楼梯

最小花费上楼梯

时间:2023-05-20 11:34:02浏览次数:45  
标签:楼顶 花费 到达 最小 楼梯 dp size

https://leetcode.cn/problems/min-cost-climbing-stairs/

image

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int size=cost.size();
        vector <int> dp (size+1);//表示的是到达第i层的最小花费
        dp[0]=dp[1]=0;
        for(int i=2;i<size+1;i++){//=size 就是到size+1
            dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
        }
        return dp[size];//size,就是第size+1位置,就是楼顶
    }   
};  

题目问你的是到达楼顶的最小花,那么其实就是要求到达第i阶所需要的最小花费,进而我们设dp[i]代表到达第i阶的最小花费

由题意得:
楼顶在第size+1的位置,题目给你的是所有楼梯的价值,让你求的是到达楼顶的价值,也就是size+1位置的值。

那么我们的数组就开到size+1,循环也是开到size+1的位置,返回的是size位置,数组从0开始,也就是第size+1上的值。

dp方程分析:
dp代表的是到达第i阶的最小价值,我这一阶可以从两种方式到达,一种是从i-1(上一阶)到,就是dp[i-1] 到达第i-1处所花费的最小价值,加上cost[i-1] 上一阶要走的话所支付的费用。

同理,从上上阶上来到这一阶就是dp[i-2]+cost[i-2],

再对这两种情况,取最小值,以确定这一阶怎么走花费最小。

dp[0]=dp[1]=0
image
因为一定是2个元素的,所以我们从2个分析:
因为可以从0或1开始,那么他们就没有到达价值,就是到达这一个不用花费。

,然后我们要上到楼顶可以选择从0上到楼顶,也可以从1到楼顶,然后加上那一节的花费。

10 15 20
15

就是从1开始,花费15直接到楼顶,而不是从0花费10到20在花费20到楼顶(30)

标签:楼顶,花费,到达,最小,楼梯,dp,size
From: https://www.cnblogs.com/E-Sheep/p/17416949.html

相关文章

  • LeetCode/子数组的最小值之和
    给定一个整数数组arr,找到min(b)的总和,其中b的范围为arr的每个(连续)子数组。1.单调栈假如要遍历所有区间,哪怕可以直接获得最小值,时间复杂度也是O(n2)这里我们不逐个找对应区间,而是计算每个值对区间的贡献,可以将时间复杂度降到O(n)其实也就找遍历时当前值的左边界和右边界,在......
  • P5540 [BalkanOI2011] timeismoney | 最小乘积生成树
    题意给一个无向图,边有两个权\(a\)和\(b\),定义一个生成树的权值是\(\left(\sum\limits_{e\inT}a_e\right)\left(\sum\limits_{e\inT}b_e\right)\),求最小权值生成树。权值相同请最小化\(a\)的和。\(1\len\le200,1\lem\le10000,0\lea_e,b_e\le255\)。题解纯粹记......
  • 最小生成树
    最小生成树题目描述如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz。输入格式第一行包含两个整数\(N,M\),表示该图共有\(N\)个结点和\(M\)条无向边。接下来\(M\)行每行包含三个整数\(X_i,Y_i,Z_i\),表示有一条长度为\(Z_i\)的无向边连接结点\(X_i,Y_i\)......
  • 打卡 c语言趣味编程 求最小公倍数
    问题描述:求任意两个正整数的最小公倍数(LCM)。思路:输入两个正整数,假设为num1和num2。定义一个变量lcm并初始化为较大的那个数(即lcm=max(num1,num2))。进入一个循环,循环条件为lcm不能同时被num1和num2整除。在每次循环中,将lcm增加1。循环结束后,lcm的值就是最小......
  • 最小生成树
    最小生成树最小生成树(MinimumSpanningTree,简称MST)是连接所有节点的边的集合中,权值最小的连通子图的边集合,即一个加权连通图中,找到一棵生成树,使得所有边的权值之和最小。最小生成树的求解算法主要有两种:Kruskal算法Kruskal算法也是一种贪心算法,将所有边按照权值`从小到大......
  • 最小公倍数
    一问题描述输入两个数求出他们的最小公倍数。二设计思路从一开始查看这两个数是否是因子,将最小的数输出。三程序流程图 四伪代码实现#include<iostream>usingnamespacestd;intmain(){ intm,n; for(intj=0;j<2;j++){ cin>>m; cin>>n; for(inti=1;i<=m*n;i++){ if(i......
  • 使用Rust编写的程序,可以使用快捷键启动、最小化、最大化和关闭窗口
     以下是一个使用Rust编写的程序,可以使用快捷键启动、最小化、最大化和关闭窗口: usegtk::{prelude::*,Application,ApplicationWindow,WindowPosition};usegdk::enums::key;fnmain(){letapplication=Application::new(Some("com.example"),Default::defau......
  • 最小公倍数
    一、问题描述:  二、设计思路:   三、程序流程图: 四、代码实现:#include<stdio.h>intmain(){intx,y;printf("请输入两个数字:");scanf("%d%d",&x,&y);intmax=x;if(y>max)max=y;for(inti=max;;i++)......
  • LeetCode 111. 二叉树的最小深度
    题目链接:LeetCode111.二叉树的最小深度题意:给定一个二叉树,找出其最小深度。给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。解题思路:1.递归法与求最大深度类似,采用先序或者后序都是可以的,但是这里要注意一个问题:最小深度是从......
  • 基于分时电价,采用改进粒子群算法,以最小化系统峰谷差率和用户成本最少为目标,并考虑电池
    基于分时电价,采用改进粒子群算法,以最小化系统峰谷差率和用户成本最少为目标,并考虑电池寿命和充电功率等约束条件,优化电动汽车充放电。参考论文:基于V2G的电动汽车充放电优化调度策略有注释简单易懂,可自己调整参数。ID:4525670541175133......