1 条题解

  • 1
    @ 2026-4-26 13:39:51

    神秘跳台阶游戏
    题意
    有 n 个台阶,编号为 1, 2, ..., n ,第 i 个台阶高度为 h_i 。
    小青一开始站在台阶 1 上,每次可以:
    向上跳 1 个台阶;
    或向上跳 2 个台阶。
    如果从台阶 i 跳到台阶 j ,疲惫值为:|h_i - h_j|
    求从台阶 1 跳到台阶 n 的最小总疲惫值。
    思路
    经典动态规划。 设 dp[i] 表示从第 1 个台阶跳到第 i 个台阶的最小疲惫值。
    到达第 i 个台阶有两种方式:

    1. 从第 i - 1 个台阶跳过来;
    2. 从第 i - 2 个台阶跳过来。
      所以转移为:dp[i] = min( dp[i - 1] + |h_i - h_{i - 1}|, dp[i - 2] + |h_i - h_{i - 2}| )
      边界:
      复杂度
      时间复杂度: O(n)
      空间复杂度: O(n)
      参考代码:
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int h[100005]={0};
    int dp[100005]={0};
       int cost(int i,int j){
       return abs(h[i]-h[j]);
    }
    int main(){
       cin>>n;
       for(int i=1;i<=n;i++)cin>>h[i];
       dp[2]=cost(1,2);
       for(int i=3;i<=n;i++)
          dp[i]=min(dp[i-1]+cost(i,i-1),dp[i-2]+cost(i,i-2));
          cout<<dp[n];
          return 0;
       }
    

    求赞,谢谢!

    • 1

    信息

    ID
    2938
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    149
    已通过
    31
    上传者