publicclassCoinChange{//A--- 1 2 5//M---27publicintcoinChange(int[] A,int M){//最少用多少枚硬币可以拼出27int[] f =newint[M+1];//硬币的面值种类数int n = A.length;//初始化值
f[0]=0;for(int i=1;i<=M;i++){
f[i]= Integer.MAX_VALUE;//最后一枚硬币//状态转移方程: f[i]=min{f[x-1]+1,f[x-2]+1,f[x-5]+1}for(int j=0;j<n;j++){if(i-A[j]>=0&& f[i-A[j]]!=Integer.MAX_VALUE){
f[i]=Math.min(f[i-A[j]]+1,f[i]);}}//如果拼不出面值是27的硬币if(f[M]==Integer.MAX_VALUE){
f[M]=-1;}}return f[M];}publicstaticvoidmain(String[] args){int[] A ={1,2,5};// int M = 27;int M =11;
CoinChange c =newCoinChange();int i = c.coinChange(A, M);
System.out.println(i);}}