题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=2069

题意

有面值1,5,10,25,50的硬币数枚,对于输入的面值n,输出可凑成面值n(且限制总硬笔数小于等于100枚)的方案数。特别的,n=0时方案数=1。

其中,输入n<=250。

思路

DP。

状态 ways[j][i] 表示面值等于j且硬币枚数等于i时的方案数。

初始化时,只需将ways[0][0]=1即可,其他为0;

外层先遍历硬币面值种类,这层遍历的具体顺序不重要,即保证有不重复累加同样的组合即可;

中间层遍历硬币枚数,对从小到大硬币枚数,显然需正序;再遍历各种面值,这要正序,原理同完全背包;状态转移方程见代码。

最终输出答案时做相应的简单求和即可。

代码

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <set> using namespace std; #define MAX_MONEY 250
#define COIN_CNT 100 long long ways[MAX_MONEY+5][COIN_CNT+5]; int main(int argc, const char * argv[]) {
set<int> coin={1,5,10,25,50};
memset(ways, 0,sizeof(ways));
ways[0][0]=1; for(auto it=coin.begin();it!=coin.end();++it){
for(int i=1;i<=COIN_CNT;++i){
for(int j=*it;j<=MAX_MONEY;++j){
ways[j][i]+=ways[j-*it][i-1];
}
}
} int money;
while(~scanf("%d",&money)){
long long ans=0;
for(int i=0;i<=COIN_CNT;i++){
ans+=ways[money][i];
}
printf("%lld\n",ans);
}
return 0;
}

[HDOJ]Coin Change(DP)的更多相关文章

  1. UVA.674 Coin Change (DP 完全背包)

    UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...

  2. LeetCode OJ 322. Coin Change DP求解

    题目链接:https://leetcode.com/problems/coin-change/ 322. Coin Change My Submissions Question Total Accep ...

  3. UVA 674 Coin Change(dp)

    UVA 674  Coin Change  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...

  4. HDOJ 2069 Coin Change(母函数)

    Coin Change Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. UVA 674 Coin Change 换硬币 经典dp入门题

    题意:有1,5,10,25,50五种硬币,给出一个数字,问又几种凑钱的方式能凑出这个数. 经典的dp题...可以递推也可以记忆化搜索... 我个人比较喜欢记忆化搜索,递推不是很熟练. 记忆化搜索:很白 ...

  6. [LeetCode] Coin Change 硬币找零

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  7. Epic - Coin Change

    Something cost $10.25 and the customer pays with a $20 bill, the program will print out the most eff ...

  8. C - Coin Change (III)(多重背包 二进制优化)

    C - Coin Change (III) Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  9. Coin Change (II)(完全背包)

                                                               Coin Change (II) Time Limit: 1000MS   Mem ...

随机推荐

  1. python流程控制for循环

    流程控制 for循环 #首先我们用一例子看下用while循环取出列表中值的方法 l=['a','b','c'] i=0 while i<len(l): print(l[i]) i+=1 #whi ...

  2. web前端安全的三个关键点

    一.浏览器的同源策略 同源策略:不同域的客户端脚本在未经授权的情况下不能读写对方的资源. 这里有几个关键词:域.脚本.授权.读写.资源 1.同域要求两个站点:同协议.同域名.同端口.下表展示了所列站点 ...

  3. java Run to Line

    在运行Java代码时, 选择运行  Run AS java ,  出现    java Run to Line, 是因为程序还在运行,没有停止.在控制,点击右键.terminate  结束,在Run ...

  4. ajax分页代码

    <meta charset="utf-8"><?php//连接数据库$link = mysqli_connect('127.0.0.1','root','root ...

  5. Android 开发进入Linux系统执行命令 2018-5-25 Fri.

    /** * 进入linux cmd执行命令 * * @param command * @return */ private boolean runRootCommand(String command) ...

  6. Nodejs 菜鸟教程学习-创建第一个应用

    注:为了解学习,都是参照http://www.runoob.com/nodejs/nodejs-tutorial.html书写,做下笔记. 对于Nodejs开发来说,在开发一个应用时,我们不仅仅是实现 ...

  7. 16.3 authguard 通过routing path控制显示URL 通过ngif显示和隐藏

    显示或者隐藏component 通常情况下 我们的做法是把它做成class 以上两步完成,我们就可以用service了,再此之前,我们先 这样弄完以后 . 非登录状态键入上面地址会自动返回下面的地址 ...

  8. Hibernate 再接触 Hello world 模拟Hibernate

    没有Hibernate以前 Cilent 客户端 new出一个对象 然后执行JDBC 然后这样的访问数据库并不是面向对象语言 使用Hibernate以后 Cilent new 出一个对象后 访问配置文 ...

  9. C++ AfxBeginThread和AfxEndThread 使用方法

    启动线程: CWinThread* AfxBeginThread( 线程函数,this ); 线程的退出: 在刚刚使用的时候,退出线程的方法有问题,导致退出的时候异常. 下面说线程退出的方法: 1. ...

  10. 吴裕雄 python深度学习与实践(5)

    import numpy as np data = np.mat([[1,200,105,3,False], [2,165,80,2,False], [3,184.5,120,2,False], [4 ...