夕拾算法进阶篇:20)货币系统 (完全背包_动态规划DP)
来源:互联网 发布:关闭电脑软件自动更新 编辑:程序博客网 时间:2024/05/16 03:23
题目描述
母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。,他们对货币的数值感到好奇。传统地,一个货币系统是由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)
3 10
1 2 5
样例输出
母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。,他们对货币的数值感到好奇。传统地,一个货币系统是由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;}}
0 0
- 夕拾算法进阶篇:20)货币系统 (完全背包_动态规划DP)
- 夕拾算法进阶篇:17)01背包和完全背包问题 (动态规划DP)
- 夕拾算法进阶篇:18)装箱问题 (01背包_动态规划DP)
- 夕拾算法进阶篇:19)采药 (01背包_动态规划DP)
- 算法_动态规划_货币兑换
- 动态规划9_完全背包
- 夕拾算法进阶篇:12)出栈序列统计(动态规划DP)
- 夕拾算法进阶篇:13)最大连续子序列(动态规划DP)
- 夕拾算法进阶篇:14)最长上升子序列(动态规划DP)
- 夕拾算法进阶篇:15)最长公共子序列(动态规划DP)
- 夕拾算法进阶篇:16)最长回文子串(动态规划DP)
- 夕拾算法进阶篇:28)矩阵连乘(动态规划DP)
- 夕拾算法进阶篇:32)DAG最长路(动态规划DP)
- 【动态规划进阶-背包型】钱币系统
- 动态规划背包算法(01背包和完全背包)
- 动态规划-----完全背包
- 完全背包---动态规划
- 【动态规划】完全背包
- Bootstrap学习笔记(三)表单
- React Native 指定 style
- android截屏 (非root,只限当前acitvity当中)
- 多个线程之间如何进行通信
- FCN-for-semantic-image-segmentation 训练过程的一些坑记录_0
- 夕拾算法进阶篇:20)货币系统 (完全背包_动态规划DP)
- 多个文件打包下载 java
- 使用consul实现分布式服务注册和发现
- iOS开发小记:运用Runtime机制扩大UIButton的响应区域
- 「一句话经典」从Spring到SpringMVC再到JavaEE开发颠覆者Spring Boot,最后佛法无边Spring Cloud;只不过却成了nodejs的笑柄
- 筛法求素数
- pytorch 学习笔记(一)
- 【企业报表数据读取与传递】【第二节】报表数据读取规则界面开发
- js高级程序设计笔记7--DOM2和DOM3