| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | public class DynamicProgram {public static void main(String[] args) {
 int[] arr = {1,2,4,1,7,8,3};
 int dp = dp_opt(arr);
 System.out.println(dp);
 System.out.println("=============");
 int rec = rec_opt(arr, arr.length-1);
 System.out.println(rec);
 }
 
 // 递归
 public static int rec_opt(int[] arr, int i) {
 if (i == 0) {
 return arr[0];
 } else if (i == 1) {
 return Math.max(arr[0], arr[1]);
 } else {
 int a = rec_opt(arr, i-2) + arr[i];
 int b = rec_opt(arr, i-1);
 return Math.max(a, b);
 }
 }
 
 // 动态规划
 public static int dp_opt(int[] arr) {
 int[] opt = new int[arr.length];
 opt[0] = arr[0];
 opt[1] = Math.max(arr[0], arr[1]);
 for (int i=2; i<arr.length; i++) {
 int a = opt[i-2] + arr[i];
 int b = opt[i-1];
 opt[i] = Math.max(a, b);
 }
 return opt[arr.length-1];
 }
 }
 
 |