猴子上楼梯的c语言详细原代码及解析
发布网友
发布时间:2022-06-01 20:02
我来回答
共4个回答
热心网友
时间:2023-10-14 16:29
20分……
只能给你思路了
用数组a[i]记录猴子上到第i个阶梯时最少代价,b[i]为所输入的阶梯上的正整数数据
用两层循环,
第一层循环i是从1到n,对每层阶梯进行扫描
第二层循环j是从1到k,如果a[i+j]<a[i]+b[i+j]即将a[i+j]更新为a[i]+b[i+j]
a[i]+b[i+j]的意思是在第i层阶梯的最少代价加上第i+j层的那个数据,
如果小于在第i+j层的暂时最小代价(因为最小值还没确定),
那么就更新第i+j层的代价,使它变得更小
这样一步步递推,就能得到a[n]的最小代价
热心网友
时间:2023-10-14 16:29
20分……
只能给你思路了
用数组a[i]记录猴子上到第i个阶梯时最少代价,b[i]为所输入的阶梯上的正整数数据
用两层循环,
第一层循环i是从1到n,对每层阶梯进行扫描
第二层循环j是从1到k,如果a[i+j]<a[i]+b[i+j]即将a[i+j]更新为a[i]+b[i+j]
a[i]+b[i+j]的意思是在第i层阶梯的最少代价加上第i+j层的那个数据,
如果小于在第i+j层的暂时最小代价(因为最小值还没确定),
那么就更新第i+j层的代价,使它变得更小
这样一步步递推,就能得到a[n]的最小代价
热心网友
时间:2023-10-14 16:30
#include <stdio.h>
int n,k;
int cost[100];
int best(int curstep)
{
double use=0;int stp=1;
for(int i=1;i<=k;++i)
if(use<(double)i/cost[curstep+i])
{
use=(double)i/cost[curstep+i];
stp=i;
}
return stp;
}/*步长÷代价越大越好*/
int main()
{
int i,all=0,curstep=0;
scanf("%d %d",&n,&k);
for(i=1;i<=n;++i) scanf("%d",&cost[i]);
for(i=1;curstep+k<n;++i)
{
curstep+=best(curstep);
all+=cost[curstep];
}/*若curstep+k<n,直接跳到最后*/
printf("%d",all+cost[n]);
}
热心网友
时间:2023-10-14 16:30
没看懂题目!~~~~~~~~`````