题解 | #最小花费爬楼梯#

最小花费爬楼梯

https://www.nowcoder.com/practice/9b969a3ec20149e3b870b256ad40844e

#include <stdio.h>

int cost(int* arr,int n);
int main() {
   int n=0;
   scanf("%d",&n);
   int arr[100000]={0};
   for(int i=0;i<n;i++)
   {
    scanf("%d",&arr[i]);
   }
   int ret=0;
   ret=cost(arr,n);
   printf("%d",ret);
    return 0;
}
int cost(int* arr,int n)
{
    int dp[10001]={0};
    if(n==1)
    return 0;
    else if(n==2)
    return 0;
    else
    {
        dp[0]=0;
        dp[1]=0;
        for(int i=2;i<n;i++)
        {
            dp[i]=dp[i-1]+arr[i-1]<dp[i-2]+arr[i-2]?dp[i-1]+arr[i-1]:dp[i-2]+arr[i-2];
        }
       return dp[n-1]+arr[n-1]<dp[n-2]+arr[n-2]?dp[n-1]+arr[n-1]:dp[n-2]+arr[n-2];
    }
     
}

当走到第n阶台阶时,可以是从第n-1阶台阶上来的,也可以是从第n-2阶台阶上来的,这时候就需要考虑是从n-1阶台阶上来时花费的少还是从n-2阶台阶上来时花费较少,所有使用一个三目比较符进行比较大小。最后应为当n=1或2的时候,不需要花钱,需要初始化dp[0],与dp[1].

全部评论

相关推荐

牛客100866号技...:把电科加粗,把电科加粗,把电科加粗,两个吊车尾的项目合并成一个,再加一个管理系统。电科✌🏻在成都面中厂手拿把掐
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务