夕拾算法进阶篇:20)货币系统 (完全背包_动态规划DP)
2017-02-12 10:16
267 查看
题目描述
母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。,他们对货币的数值感到好奇。传统地,一个货币系统是由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)。
输入
输入包含多组测试数据
货币系统中货币的种类数目是 V 。 (1<= V<=25)
要构造的数量钱是 N 。 (1<= N<=10,000)
第 1 行: 二整数, V 和 N
第 2 ..V+1行:可用的货币 V 个整数 (每行一个,每行没有其它的数)。
输出
单独的一行包含那个可能的构造的方案数
样例输入
3 10
1 2 5
样例输出
10
该题属于完全背包的范畴,但是注意和原始的背包问题不同,这里是求方案数。令dp[i][v]表示用前i种硬币能表示v数量货币的方法数,则对第i种硬币也有选和不选的策略,而总的方案数为二者之和,因此可得状态转移方程:
dp[i][v]=dp[i-1][v]+dp[i][v-w[i]] (1<=i<=n,w[i]<=v<=V)
边界dp[1][v]=1(其余dp初始皆为0),同样,该方程也可以直接去掉i维,但保证v从w[i]开始顺序枚举。
题目来源:http://www.codeup.cn/problem.php?cid=100000631&pid=2
母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。,他们对货币的数值感到好奇。传统地,一个货币系统是由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)。
输入
输入包含多组测试数据
货币系统中货币的种类数目是 V 。 (1<= V<=25)
要构造的数量钱是 N 。 (1<= N<=10,000)
第 1 行: 二整数, V 和 N
第 2 ..V+1行:可用的货币 V 个整数 (每行一个,每行没有其它的数)。
输出
单独的一行包含那个可能的构造的方案数
样例输入
3 10
1 2 5
样例输出
10
该题属于完全背包的范畴,但是注意和原始的背包问题不同,这里是求方案数。令dp[i][v]表示用前i种硬币能表示v数量货币的方法数,则对第i种硬币也有选和不选的策略,而总的方案数为二者之和,因此可得状态转移方程:
dp[i][v]=dp[i-1][v]+dp[i][v-w[i]] (1<=i<=n,w[i]<=v<=V)
边界dp[1][v]=1(其余dp初始皆为0),同样,该方程也可以直接去掉i维,但保证v从w[i]开始顺序枚举。
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int w[28]; long long dp[10008]; int main(){ int m,n,i,v; while(cin>>n>>m){ memset(dp,0,sizeof(dp)); dp[0]=1; for(i=0;i<n;i++){ cin>>w[i]; } for(i=0;i<n;i++){ for(v=w[i];v<=m;v++){ dp[v]=dp[v]+dp[v-w[i]]; } } cout<<dp[m]<<endl; } }
题目来源:http://www.codeup.cn/problem.php?cid=100000631&pid=2
相关文章推荐
- [USACO 2.3.4]货币系统【DP完全背包的简单应用】CSUST 1081
- [USACO 2.3.4]货币系统【DP完全背包的简单应用】CSUST 1081
- 夕拾算法进阶篇:17)01背包和完全背包问题 (动态规划DP)
- 夕拾算法进阶篇:19)采药 (01背包_动态规划DP)
- DP 动态规划 Problem R 1018 完全背包
- 夕拾算法进阶篇:18)装箱问题 (01背包_动态规划DP)
- tyvj p1015公路乘车-动态规划dp-完全背包
- 夕拾算法进阶篇:14)最长上升子序列(动态规划DP)
- 夕拾算法进阶篇:28)矩阵连乘(动态规划DP)
- HUD 1114 Piggy-Bank 存钱罐 (完全背包 动态规划DP)
- 算法竞赛宝典 动态规划 货币系统问题(完全背包+一维优化)
- 夕拾算法进阶篇:32)DAG最长路(动态规划DP)
- 夕拾算法进阶篇:13)最大连续子序列(动态规划DP)
- 120.货币系统(完全背包的方案数目)
- DP(三)——简单的完全背包
- HDU 2159 FATE (动态规划dp之二维完全背包问题)
- USACO / Money Systems货币系统(DP)
- HDU 1028 Ignatius and the Princess III 动态规划完全背包
- HDU 1284 钱币兑换问题 动态规划完全背包
- 0-1背包问题与完全背包问题C++实现 动态规划