1 2 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]; } }
|