C++笔试练习笔记【5】:最小花费爬楼梯(有题目链接) 初识动态规划

文章目录

题目

题目链接:https://www.nowcoder.com/practice/9b969a3ec20149e3b870b256ad40844e?tpld=230\&tpld=39751\&ru=/exam/oj

思路

有几个细节要明确

  • consti是在离开时花费的体力所以在离开时才会加
  • 根据例子我们能知道数组给了i个数我们下标到达i才算到顶,如图如果我们必须到达costi+1才算登顶

动态规划:

  1. 状态表示:
    dpi:到达i位置所用最小花费
  2. 状态转移方程

    因为一次只能向上一个台阶或者两个台阶所以只有i-1,i-2两种可能。
cpp 复制代码
	dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

代码

cpp 复制代码
#include <iostream>
using namespace std;

#define N 100010

int main() {
    int cost[N]={0};
    int dp[N]={0};
    int n;

    cin >> n;
    for(int i=0;i<n;i++)
        cin >> cost[i];
    
    for(int i=2;i<=n;i++)
        dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
    
    cout << dp[n] << endl;
    return 0;
}

动态规划简介

一、什么是动态规划

动态规划(Dynamic Programming)是一种在解决多阶段决策问题时常用的算法思想。它通过将复杂问题分解成一系列相互关联的子问题,并按照一定的顺序求解这些子问题,从而避免了重复计算,提高了算法的效率。上面的题的思想就是动态规划。

动态规划的核心思想是"最优子结构"和"重叠子问题"。最优子结构意味着一个问题的最优解包含了其子问题的最优解。重叠子问题则是指在求解过程中,相同的子问题会被多次计算。

二、动态规划的应用场景

动态规划在许多领域都有广泛的应用,例如:

  1. 求解最短路问题,如在图中找到从一个节点到另一个节点的最短路径。
    • 例如,在一个城市交通网络中,寻找从起点到终点的最短行驶路线。
  2. 资源分配问题,如何合理分配有限的资源以达到最优效果。
    • 比如在项目管理中,合理分配人力和时间资源,以使项目能够在最短时间内完成。
  3. 背包问题,给定一组物品和一个背包容量,选择哪些物品放入背包能使价值最大化。

三、动态规划的基本步骤

  1. 定义状态表示:明确问题中的状态变量,这些变量通常用来描述子问题的解。
  2. 建立状态转移方程:找出不同状态之间的关系,确定如何从一个状态转移到另一个状态。
  3. 初始化边界条件:确定初始状态的值。
  4. 按照合适的顺序计算状态值:通常是从边界条件开始,逐步计算其他状态的值。

四、动态规划的优缺点

优点:

  1. 能够有效地降低算法的时间复杂度,避免重复计算。
  2. 对于具有最优子结构和重叠子问题的问题,能够得到最优解。

缺点:

  1. 空间复杂度可能较高,需要存储状态值。
  2. 状态定义和转移方程的推导可能比较困难,需要对问题有深入的理解。

总之,动态规划是一种强大的算法思想,掌握它对于解决许多复杂的优化问题具有重要意义。但在实际应用中,需要根据具体问题的特点来选择是否使用动态规划以及如何设计有效的算法。

相关推荐
葡萄成熟时 !7 小时前
JAVA 常用API学习笔记
java·笔记·学习
DevOpenClub8 小时前
个人公开市场研究笔记功能需求文档
笔记
别动我齐刘海9 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
傻啦嘿哟10 小时前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫
码匠许师傅11 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试
闻道且行之11 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
.格子衫.12 小时前
032动态规划之区间DP——算法备赛
算法·动态规划
莫浅子12 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
小欣加油13 小时前
leetcode3069 将元素分配到两个数组中I
数据结构·c++·算法·leetcode·职场和发展
不会代码的小猴13 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json