1. 程式人生 > >Ex 6_17 數量無限的硬幣兌換問題_第七次作業

Ex 6_17 數量無限的硬幣兌換問題_第七次作業

stat div als image 技術 color length 關系 求解

技術分享圖片

子問題定義:定義一個數組b,大小比兌換價格的大小多一個元素,其中b[i]表示是否能用面值為x1,x2,x3,..,xn的硬幣兌換價格i。

遞歸關系:

技術分享圖片

初值設定:設b[0]=true

求解順序:按下標從小到大依次求解b[i]的值,最後返回b[v]中的結果即為最終結果。

技術分享圖片
 1 package org.xiu68.ch06.ex7;
 2 
 3 public class Ex6_17 {
 4 
 5     //數量無限的面值為x1,x2,x3,...,xn的硬幣是否能兌換價格v
 6     public static void main(String[] args) {
 7         //
TODO Auto-generated method stub 8 int[] coin=new int[]{5,6}; 9 for(int i=0;i<=30;i++) 10 convertChange(coin,i); 11 } 12 13 //coin:硬幣面值 14 //v:要兌換的價格 15 public static void convertChange(int[] x,int v){ 16 boolean b[]=new boolean[v+1]; //能否用硬幣兌換價格v
17 b[0]=true; 18 19 for(int i=1;i<=v;i++){ //能否用硬幣兌換價格i (子問題的規模) 20 for(int j=0;j<x.length;j++){ 21 if(i>=x[j] && b[i-x[j]]==true){ 22 b[i]=true; 23 break; 24 }else
{ 25 b[i]=false; 26 } 27 } 28 } 29 System.out.println(v+":"+b[v]); 30 } 31 32 //運行結果 33 /* 0:true 34 1:false 35 2:false 36 3:false 37 4:false 38 5:true 39 6:true 40 7:false 41 8:false 42 9:false 43 10:true 44 11:true 45 12:true 46 13:false 47 14:false 48 15:true 49 16:true 50 17:true 51 18:true 52 19:false 53 20:true 54 21:true 55 22:true 56 23:true 57 24:true 58 25:true 59 26:true 60 27:true 61 28:true 62 29:true 63 30:true*/ 64 }
View Code

Ex 6_17 數量無限的硬幣兌換問題_第七次作業