package com.lyf.dp;
import org.junit.Test;
/**
* Created by fangjiejie on 2017/5/18.
*/
public class MinCurrency {
public int getMinNumber2(int arr[],int aim){
if(arr==null||arr.length==0||aim<0){
return -1;
}
int n=arr.length;
int max=Integer.MAX_VALUE;
int [][]dp=new int[n][aim+1];
for(int j=1;j<=aim;j++){
dp[0][j]=max;
}
if(arr[0]<=aim){
dp[0][arr[0]]=1;
}
for(int i=1;i<n;i++){
for(int j=1;j<=aim;j++){
int left=max;
if(j>=arr[i]&&dp[i-1][j-arr[i]]!=max){
left=dp[i-1][j-arr[i]]+1;
}
dp[i][j]=Math.min(dp[i-1][j],left);
}
}
return dp[n-1][aim]==max?-1:dp[n-1][aim];
}
@Test
public void test2(){
int a1[]={5,2,3};
int aim1=20;
int a2[]={5,2,3,5};
int aim2=10;
int aim3=15;
System.out.println(getMinNumber2(a1,aim1));
System.out.println(getMinNumber2(a2,aim2));
System.out.println(getMinNumber2(a2,aim3));
}
}
运行结果:
-1
2
4