题解 | 小红的地砖
小红的地砖
https://www.nowcoder.com/practice/8cd083c66a5f43489a532164e2a2304d
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int a =in.nextInt();
int s[]=new int[a];
int dp[]=new int[a];
for(int i=0;i<a;i++){
s[i]=in.nextInt();
}
dp[0]=0;
dp[1]=s[1];
for(int i=2;i<a;i++){
dp[i]=Math.min(s[i]+dp[i-1],s[i]+dp[i-2]);
}
System.out.print(dp[a-1]);
}
}
状态转移方程: dp[i]=Math.min(s[i]+dp[i-1],s[i]+dp[i-2]);
dp[i]:到达第i个阶梯花费最少体力
到达第i个阶梯有两条路
一:从i-2处走两步到i,花费体力:到达i-2处最少体力+i阶梯体力
二:从i-1处走两步到i,花费体力:到达i-1处最少体力+i阶梯体力
所以到达i阶梯最终体力等于两者最小: dp[i]=Math.min(s[i]+dp[i-1],s[i]+dp[i-2]);

上海得物信息集团有限公司公司福利 1254人发布