动态规划
动态规划通过把原问题分解为相对简单的子问题来解决复杂问题,动态规划常常适用于有重叠子问题和最优子结构性质的问题。
基本思想
解决一个问题时,我们可以先解决该问题的子问题,然后合并子问题来得到所求的解。
典型问题
1、走楼梯或者跳格子问题
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢?
注意:给定 n 是一个正整数。
f(n) = f(n-1)+f(n-2)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if (i <= 2) {
list.add(i);
} else {
list.add(list.get(i - 3) + list.get(i - 2));
}
}
System.out.println(list.get(list.size() - 1));
}
}