讲实话这题和前面的是差不多的。
这题的思路如下:
假设现在是第N阶台阶,那么其实事实是你只需将
到第N-1阶台阶前所需的钱加上第N-1阶台阶到第N阶台阶的花费和到第N-2阶台阶前所需的钱加上第N-2阶台阶到第N阶台阶的花费作比较,谁小谁就是最终的结果。
推荐像我一样的基础还不扎实的可以试着在草稿纸上写下思路或整个过程然后仔细思考直至相通。
好了,代码如下,加油!
#include <stdio.h> int main() { int dp[1000000]={0},cost[100000],i,n,result; //dp[]是表示第i阶台阶所需的费用,因为你能选择是从第一阶台阶开始还是从第0 阶台阶开始, //所以我们将dp初始赋值为0,反正后面都会再次赋值。 scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&cost[i]); for(i=2;i<n;i++){ dp[i]=((dp[i-1]+cost[i-1])<(dp[i-2]+cost[i-2])?(dp[i-1]+cost[i-1]):(dp[i-2]+cost[i-2])); } result=(dp[n-1]+cost[n-1])<(dp[n-2]+cost[n-2])?(dp[n-1]+cost[n-1]):(dp[n-2]+cost[n-2]); printf("%d",result); return 0; }