跳房子是小朋友玩的游戏。地面上画出一连串格子,每个格子里有一个整数,小朋友从外面跳入格子,并继续往前跳,直到跳出所有格子。每次跳跃的规则是,可以跳入下一格或下下格或下下下格。怎么跳能让落脚格子里的数的累加和最小。 输入格式: 第一行输入格子数 n (1<n<100),第二行输入从起点处到终点处每个格子里的数,该数小于10。 输出格式: 输出最小累加和。java实现
时间: 2024-02-18 14:05:30 浏览: 200
大班游戏活动教案《跳房子》.docx
好的,下面是Java实现代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n+1];
for (int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
}
int[] dp = new int[n+1];
dp[1] = a[1];
if (n >= 2) {
dp[2] = a[1] + a[2];
}
if (n >= 3) {
dp[3] = Math.min(dp[2] + a[3], Math.min(dp[1] + a[2] + a[3], a[1] + a[2] + a[3]));
}
for (int i = 4; i <= n; i++) {
dp[i] = Math.min(dp[i-1] + a[i], Math.min(dp[i-2] + a[i-1] + a[i], dp[i-3] + a[i-2] + a[i-1] + a[i]));
}
System.out.println(dp[n]);
}
}
```
首先读入格子数和每个格子里的数,然后定义一个数组 dp 来记录最小累加和。我们先特判了 i=1、i=2 和 i=3 的情况,然后用循环更新 dp 数组。最后输出 dp[n] 即可。
注意,数组 a 和 dp 的下标都是从1开始的,这是为了方便处理。
阅读全文