(完全)背包的方案总数问题

USACO Section 2.3 货币系统 Money Systems

题目描述

母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统。由于它们特殊的思考方式,它们对货币的数值感到好奇。

传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。

母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。

举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它。 写一个程序来计算有多少种方法用给定的货币系统来构造一定数量的面值。保证总数将会适合long long (C/C++) 和 Int64 (Free Pascal),即在0 到2^63-1之间。

输入输出格式

输入格式:

货币系统中货币的种类数目是 V (1<=V<=25)。要构造的数量钱是 N (1<= N<=10,000)。

第一行: 二个整数,V 和 N 。

第二行: 可用的货币的面值 。

输出格式:

单独的一行包含那个可能的用这v种硬币凑足n单位货币的方案数。

 1 #include<iostream>
 2 using namespace std;
 3 int a[30];
 4 long long dp[10000+10];
 5 int V,N;
 6 int main()
 7 {
 8     cin>>V>>N;
 9     for(int i=1;i<=N;i++) dp[i]=0;
10     dp[0]=1;
11     for(int i=1;i<=V;i++) cin>>a[i];
12     for(int i=1;i<=V;i++){
13         for(int j=a[i];j<=N;j++)
14             dp[j]+=dp[j-a[i]];
15     }
16     cout<<dp[N];
17     return 0;
18 }
时间: 2024-10-07 09:00:41

(完全)背包的方案总数问题的相关文章

518-零钱兑换 II(完全背包-求方案总数)

518-零钱兑换 II(完全背包-求方案总数) 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, coins = [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 5=5 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1 示例 2: 输入: amount = 3, coins = [2] 输出: 0 解释: 只用面额2的硬币不能凑成总金额3. 示例 3: 输入: amo

杭电 1284 钱币兑换问题【完全背包求方案总数】

解题思路:因为对于完全背包的状态转移方程f[v]=max(f[v],f[v-c[i]]+w[i])已经记录了所有背包组成的方案,只不过通常问的是求最大值,现在要求方案总数 即为 f[v]=sum(f[v],f[v-c[i]+w[i]]), Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Output 对应每个输入,输出兑换方法数. Sample Inp

poj 2229 Sumsets 完全背包求方案总数

Sumsets Description Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 7: 1) 1+1+1+1+1+1+1 2)

八.背包问题方案总数

八.背包问题方案总数 对于一个给定了背包容量.物品费用.物品间相互关系(分组.依赖等)的背包问题,除了再给定每个物品的价值后求可得到的最大价值外,还可以得到装满背包或将背包装至某一指定容量的方案总数. 对于这类改变问法的问题,一般只需将状态转移方程中的max改成sum即可.例如若每件物品均是01背包中的物品,转移方程即为f[i][v]=sum{f[i-1][v],f[i-1][v-w[i]]+c[i]},初始条件f[0][0]=1. 事实上,这样做可行的原因在于状态转移方程已经考察了所有可能的背

背包DP 方案数---P1832 A+B Problem(再升级)

P1832 A+B Problem(再升级) 题面描述 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 题解 我们可以考虑背包DP实现 背包DP方案数板子题 f[ i ] = f[ i ] + f[ i - a[j] ] f[ j ] 表示数字 j 用若干个素数表示的方案总数 注意 1.线性筛不要写错: 1)not_prime[maxn] maxn>=n   2)memset not_prime 数组之后,0,1初始化不是素数 2.方案数 DP 数组要开 long long 代码 #i

2016.4.3 动态规划NOI专练 王老师讲课整理

1.6049:买书 总时间限制:  1000ms 内存限制:  65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买多本) 输入 一个整数 n,代表总共钱数.(0 <= n <= 1000) 输出 一个整数,代表选择方案种数 样例输入 样例输入1: 20 样例输入2: 15 样例输入3: 0 样例输出          样例输出1:           2         样例输出2:       0    

背包方案

对于一个给定了背包容量.物品费用.物品间相互关系(分组.依赖等)的背包问题, 除了再给定每个物品的价值后求可得到的最大价值外,还可以得到装满背包或将背包装至某一指定容量的方案总数. 对于这类改变问法的问题,一般只需将状态转移方程中的max改成sum即可. 例如若每件物品均是01背包中的物品, 转移方程即为f[i][v]=sum{f[i-1][v],f[i-1][v-w[i]]+c[i]},初始条件f[0][0]=1. [例8].货币系统 [问题描述] 给你一个n种面值的货币系统,求组成面值为m的

hdu 2126 Buy the souvenirs(记录总方案数的01背包)

Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1662    Accepted Submission(s): 611 Problem Description When the winter holiday comes, a lot of people will have a trip. Genera

背包方案问题

博客园 首页 新随笔 联系 订阅 管理 随笔 - 766  文章 - 1  评论 - 107 八.背包问题方案总数 对于一个给定了背包容量.物品费用.物品间相互关系(分组.依赖等)的背包问题,除了再给定每个物品的价值后求可得到的最大价值外,还可以得到装满背包或将背包装至某一指定容量的方案总数. 对于这类改变问法的问题,一般只需将状态转移方程中的max改成sum即可.例如若每件物品均是01背包中的物品,转移方程即为f[i][v]=sum{f[i-1][v],f[i-1][v-w[i]]+c[i]}