算法_動態規劃_貨幣兌換

wn25 9年前發布 | 5K 次閱讀 Java 算法

算法簡介:

有一個貨幣系統,它有n種貨幣,它的面值為V1,V2,V3......... ,其中V1 =1。請設計一動態規劃算法實現以最小的貨幣數目兌換面值為m 的錢。


代碼如下:

    import java.util.Scanner;

public class Algorithm_2 {  

    /** 
     * @param args 
     */  
    private static final int MAX_M=20;  
    private static final int MAX_N=100000;  
    private static int[][] table = new int[MAX_N][MAX_M];  
    private static int[] value = new int[MAX_N];  

    public static void main(String[] args) {  
        Scanner sc = new Scanner(System.in);  
        while(true){  
            System.out.println("輸入硬幣種類的數目:");  
            int m = sc.nextInt();  
            System.out.println("從小到大輸入硬幣的面值,其中第一個是1:");  

            for(int i=1;i<=m;i++)  
                value[i]= sc.nextInt();  
            System.out.println("輸入要兌換的錢的面值:");  
            int n = sc.nextInt();  

            for(int i=0;i<=n;i++)//初始化  
                table[i][0]=0;  
            for(int i=0;i<=m;i++)  
                table[0][i]=0;  

            for(int i=1;i<=n;i++){  
                for(int j=1;j<=m;j++){  
                    if(value[j] == i)  
                        table[i][j]=1;  
                    else if(value[j]<i)  
                        table[i][j]=table[i-value[j]][j]+1;  
                    else table[i][j]=table[i][j-1];  
                }  
            }  
            System.out.println("兌換的最小硬幣的個數是:" +table[n][m]);  
            System.out.println("---------------------------------");  
        }  
    }  

}  </pre> 


 本文由用戶 wn25 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!