挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现相关的知识,希望对你有一定的参考价值。

问题&思路:

代码:

import java.util.Scanner;

public class CoinChanging 
    public static void main(String[] args) 
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        int m = cin.nextInt();
        int C[] = new int[m];
        for (int i=0;i<m;i++)
            C[i] = cin.nextInt();
        

        int T[][] = new int[m][n+1];
        for (int i=0;i<m;i++)
            T[i][0] = 0;
        

        for (int j=1;j<=n;j++)
            for (int i=0;i<m;i++)
                if(i==0)//第一行,从最小的数开始,它只能使用当前面值
                    T[i][j] = T[i][j-C[i]] + 1;
                
                else if(j-C[i]<0)//如果不使用这个面值,上一个值就不能算了,那么就只能顺延
                    T[i][j] = T[i-1][j];
                
                else //正常情况
                    T[i][j] = Math.min(T[i-1][j], T[i][j-C[i]] + 1);
                
            
        

        int min_value = Integer.MAX_VALUE;
        for (int i=0;i<m;i++)
            if (min_value>T[i][n])min_value = T[i][n];
        
        System.out.println(min_value);
    


输入:

15 6
1 2 7 8 12 50

输出:

2

以上是关于挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章

挑战程序设计竞赛(算法和数据结构)——分割(下)&快速排序的JAVA实现

挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现

挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现

挑战程序设计竞赛(算法和数据结构)——16.13线段相交问题(曼哈顿算法)的JAVA实现

挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现

挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现