题目链接:1.取钱 - 蓝桥云课 (lanqiao.cn)
用动态规划的方法,定义一个dp数组,存放从0开始的取钱所需要的钞票数(0就是取0元,所以钞票数也是0)
package lanqiao;
import java.util.Arrays;
import java.util.Scanner;
/**
 * 2023/11/30
 */
public class lanqiao3297_取钱 {
        public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int[] a={1,4,5,10,20};//纸币面额
        int[] dp=new int[(int)1e5+1];//取出的金额
        Arrays.fill(dp, (int) 1e9);//全部赋值为最大值,方便和小值比较交换
        dp[0]=0;//要取出的金额为0时,给出的钞票数也为0
        for (int i=1;i<dp.length;i++){
            for (int j=0;j<a.length;j++){
                if (i>=a[j]){//如果要取出的金额大于纸币面额,则取这些钱需要总钱数减去纸币面额在加1(因为有这么大面额的纸币)
                    dp[i]=Math.min(dp[i],dp[i-a[j]]+1);//***********关键*************
                }
            }
        }
        while (scan.hasNextInt()){//输入取出金额
            int x=scan.nextInt();
            System.out.println("最少需要的钞票数为:"+dp[x]);
        }
    }
}6
最少需要的钞票数为:2
20
最少需要的钞票数为:1
2
最少需要的钞票数为:2



















