列表

详情


KS19. 最小代价爬楼梯

描述

你需要爬上一个 n 层的楼梯,在爬楼梯过程中, 每阶楼梯需花费非负代价,第i阶楼梯花费代价表示为 cost[i] , 一旦你付出了代价,你可以在该阶基础上往上爬一阶或两阶。
你可以从第 0 阶或者 第 1 阶开始,请找到到达顶层的最小的代价是多少。
n 和 cost[i] 皆为整数

数据范围: ,

输入描述

输入为一串半角逗号分割的整数,对应cost数组,例如

10,15,20

输出描述

输出一个整数,表示花费的最小代价

示例1

输入:

1,100,1,1,1,100,1,1,100,1

输出:

6

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-09-01

#include<stdio.h>

int main()
{
    int cost[1000];
    int N=0;
    while(scanf("%d",&cost[N])!=EOF)
    {
        N++;
        if(getchar()=='\n')break;
    }
    int sum=0;
    for(int i=N-1;i>=0;i--)
    {
        if(i-1>=0&&cost[i]<cost[i-1]){
            sum+=cost[i];
            
                              
        }else{
            sum+=cost[i-1];
            i=i-1;
        }
    }
    printf("%d\n",sum);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2020-05-20

#include<stdio.h>
int cost[10000];
int f[10000];
main()
{
int N,i,m,t,k;
N=0;
while(1)
{
scanf("%d",&cost[N++]);
if(getchar()!=',')
break;
}
f[0]=cost[0];
f[1]=cost[1];
for (int i=2;i<N;i++)
{
if(f[i-1]<f[i-2]) t=f[i-1];
else t=f[i-2];
f[i]=cost[i]+t;
}
k= (f[N-1]<f[N-2])?f[N-1]:f[N-2];
printf("%d",k);
}

上一题