package poj; /** * baolisousuo * @author Administrator * */ public class Solution2 { private static int [] arr = {1,2,4}; private static int aim = 3; public static void main(String[] args) { System.out.println(arr[0]); int result = countWays(arr,aim); System.out.println(result); } public static int coins1(int[]arr,int aim){ if (arr == null || aim <0 || arr.length == 0) { return 0; } return process1(arr,0,aim); } private static int process1(int[] arr, int index, int aim) { int res = 0; if (index == arr.length) { res = aim==0?1:0; }else{ for (int i = 0;arr[index]*i <= aim;i++) { res+=process1(arr,index+1,aim-arr[index]*i); } } return res; } //jiyi public static int coins2(int[]arr,int aim){ if (arr == null || arr.length == 0||aim <0) { return 0; } int [][]map = new int[arr.length+1][aim+1]; return process2(arr,0,aim,map); } private static int process2(int[] arr, int index, int aim, int[][] map) { int res = 0; if (index == arr.length) { res = aim == 0?1:0; }else{ int mapValue = 0; for (int i = 0;arr[index] * i <= aim;i++) { mapValue = map[index+1][aim-arr[index]*i]; if (mapValue != 0) { res+=mapValue == -1?0:mapValue; }else{ res+=process2(arr,index+1,aim-arr[index]*i,map); } } } map[index][aim] =res == 0?-1:res; return res; } //dp public static int countWays(int []arr,int aim){ int [] f = new int[1001]; for (int i = 0;i<f.length;i++) { f[i] = 0; } f[0] = 1; for (int i = 0;i<arr.length;i++) { for (int j = arr[i];j<=aim;j++) { f[j] =f[j-arr[i]]; } } return f[aim]; } }