拼凑面额(动态规划)

本文介绍了一种使用动态规划解决面额拼凑问题的方法。给定六种不同面额的纸币,文章中的程序能够计算出组成任意金额N的所有可能组合的数量。

题目描述

给你六种面额1、5、10、20、50、100元的纸币,假设每种币值的数量都足够多,编写程序求组成N员(N为0-10000的非负整数)的不同组合的个数。

输入描述:

输入为一个数字N,即需要拼凑的面额

输出描述:

输出也是一个数字,为组成N的组合个数。
示例1

输入

5

输出

2
 1 import java.util.Scanner;
 2 /**
 3  * 
 4  *  拼凑面额
 5  *     动态规划
 6  *         横坐标: 1——n
 7  *         纵坐标:  面值
 8  *        值:  种类数       
 9  * @author Dell
10  *
11  */
12 public class Main{
13 public static void main(String[] args) {
14     Scanner sc= new Scanner(System.in);
15     int n = sc.nextInt();
16     long[] dp = new long[n+1];
17     // 初始化
18     for (int i = 0; i < dp.length; i++) {
19         dp[i] = 0;
20     }
21     int[] a = {1,5,10,20,50,100};
22     // 装入0
23     dp[0] = 1;
24      // 动态规划
25     for (int i = 0; i < a.length; i++) {
26     for (int j = 1; j < dp.length; j++) {
27             if (j>=a[i]) {    
28                 dp[j] = dp[j]+dp[j-a[i]];
29             }
30         }
31     }
32     System.out.println(dp[n]);
33 }
34 }

 

转载于:https://www.cnblogs.com/the-wang/p/8981472.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值