Ex 6_19 至多用k枚硬币兑换价格_第七次作业

子问题定义: 定义一个二维数组b,其中b[i][j]表示用i个硬币是否能兑换价格j,表示第i个币种的面值,

递归关系:

初值设定:

求解顺序:

       按下标从小到大依次求解数组b每一列的值,最后二维数组b的右下角元素值即为最终的解。

 1 package org.xiu68.ch06.ex7;
 2 
 3 public class Ex6_19 {
 4     //数量无限的面值为x1,x2,x3,...,xn的硬币是否能兑换价格v,并且最多只能使用k枚硬币
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         int[] x2=new int[]{5,10};
 8         convertChange(x2, 55, 6);
 9         convertChange(x2, 65, 6);
10         System.out.println("***********************");
11         int[] x=new int[]{3,4};
12         for(int i=0;i<=15;i++)
13             convertChange(x,i,2);    
14     }
15     //coin:硬币面值
16     //v:要兑换的价格
17     //k:最多使用k枚硬币
18     public static void convertChange(int[] x,int v,int k){
19         boolean b[][]=new boolean[k+1][v+1];    //b[i][j]表示能否最多使用i枚硬币兑换价格j
20                     
21         for(int i=0;i<=k;i++)
22             b[i][0]=true;                        //价格0不需要硬币兑换
23         
24         for(int j=1;j<=v;j++)                    //不使用硬币则不可以兑换任何大于0的价格
25             b[0][j]=false;
26         
27         //寻找用p枚硬币是否能兑换价格i
28         for(int i=1;i<=v;i++){        
29             for(int p=1;p<=k;p++){
30                 for(int j=0;j<x.length;j++){
31                     
32                     if(i>=x[j] &&b[p-1][i-x[j]]==true){     //能用p枚硬币是否能兑换价格i
33                         b[p][i]=true;
34                         break;
35                     }else{                                  //不能用p枚硬币是否能兑换价格i
36                         b[p][i]=false;
37                     }
38                     
39                 }//for3
40             }//for2
41         }//for1    
42         System.out.println(v+":"+b[k][v]);
43     }
44     //运行结果
45 /*    55:true
46     65:false
47     ***********************
48     0:true
49     1:false
50     2:false
51     3:true
52     4:true
53     5:false
54     6:true
55     7:true
56     8:true
57     9:false
58     10:false
59     11:false
60     12:false
61     13:false
62     14:false
63     15:false*/
64 }
View Code
原文地址:https://www.cnblogs.com/xiu68/p/7988989.html