题意:有1,5,10,25,50五种硬币,给出一个数字,问又几种凑钱的方式能凑出这个数。

经典的dp题。。。可以递推也可以记忆化搜索。。。

我个人比较喜欢记忆化搜索,递推不是很熟练。

记忆化搜索:很白痴的算法,直接交给下一层去算,算完记录下来以免之后重复算。

代码:

/*
* Author: illuz <iilluzen[at]gmail.com>
* Blog: http://blog.csdn.net/hcbbt
* File: _uva674.cpp
* Create Date: 2013-09-20 14:00:42
* Descripton: dp, memorial
*/ #include <cstdio>
#include <cstring>
const int MAXN = 8000;
const int coin[5] = {1, 5, 10, 25, 50};
int n;
long long dp[MAXN][5]; long long solve(int i, int s) {
if (dp[s][i] != -1)
return dp[s][i];
dp[s][i] = 0;
for (int j = i; j < 5 && s >= coin[j]; j++)
dp[s][i] += solve(j, s - coin[j]);
return dp[s][i];
} int main() {
memset(dp, -1, sizeof(dp));
for (int i = 0; i < 5; i++)
dp[0][i] = 1;
while (scanf("%d", &n) != EOF)
printf("%lld\n", solve(0, n));
return 0;
}

递推:自底向上的方法,需要注意的是1+5和5+1是一种的,所以要处理一下,从小往大排就不会错了。

代码:

/*
* Author: illuz <iilluzen[at]gmail.com>
* Blog: http://blog.csdn.net/hcbbt
* File: uva674.cpp
* Create Date: 2013-09-20 13:48:56
* Descripton: dp, low to up
*/ #include <cstdio>
const int MAXN = 8000;
int n, coin[5] = {1, 5, 10, 25, 50};
long long dp[MAXN] = {1}; int main() {
for (int i = 0; i < 5; i++)
for (int j = 0; j < MAXN - 100; j++)
dp[j + coin[i]] += dp[j]; while (scanf("%d", &n) != EOF)
printf("%lld\n", dp[n]);
return 0;
}

UVA 674 Coin Change 换硬币 经典dp入门题的更多相关文章

  1. uva 674 Coin Change 换钱币【完全背包】

    题目链接:https://vjudge.net/contest/59424#problem/A 题目大意: 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值 ...

  2. UVA 674 Coin Change(dp)

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

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

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

  4. UVA 674 Coin Change (DP)

    Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make c ...

  5. UVA 674 Coin Change 硬币转换(完全背包,常规)

    题意:有5种硬币,个数无限的,组成n元的不同方案有多少种? 思路:常规完全背包.重点在dp[0]=1,dp[j]中记录的是组成 j 元的方案数.状态转移方程dp[j+coin[i]]+=dp[j]. ...

  6. UVa 674 Coin Change【记忆化搜索】

    题意:给出1,5,10,25,50五种硬币,再给出n,问有多少种不同的方案能够凑齐n 自己写的时候写出来方案数老是更少(用的一维的) 后来搜题解发现,要用二维的来写 http://blog.csdn. ...

  7. uva 10328 - Coin Toss 投硬币(dp递推,大数)

    题意:抛出n次硬币(有顺序),求至少k个以上的连续正面的情况的种数. 思路:转换成求抛n个硬币,至多k-1个连续的情况种数,用所有可能出现的情况种数减去至多k-1个的情况,就得到答案了.此题涉及大数加 ...

  8. UVa 674: Coin Change

    动态规划题.对于1,5,10,25,50五种币值的硬币,编号为0~4,存入数组cent中.数组iWay的元素iWay[k][i]表示仅使用0~i的硬币凑出k分钱的方法数,按是否使用编号为i的硬币分类, ...

  9. UVA 674 Coin Change (完全背包)

    解法 dp表示目前的种数,要全部装满所以f[0]=1其余为0的初始化是必不可少的 代码 #include <bits/stdc++.h> using namespace std; int ...

随机推荐

  1. 【maven学习笔记】 01 初见

    想学maven,maven是ant的替代品. 1:下载 maven是apache的顶级项目,在http://maven.apache.org/可以直接下载. 2:环境变量 下载完要配置环境变量,把bi ...

  2. 提升Boolean和out相结合的用户体验

    在我们编写代码的过程中经常有这样的需求,比如添加一条数据,我们想要的结果是如果添加成功了就返回true,如果添加失败了就返回false,在返回false的同时携带错误信息,我们通常的做法是定义这样的方 ...

  3. opencv菜鸟学习之旅cvNorm

    Norm 计算数组的绝对范数, 绝对差分范数或者相对差分范数 double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_ty ...

  4. MEMS陀螺仪(gyroscope)的结构

    MEMS陀螺仪(gyroscope)的设计和工作原理可能各种各样,但是公开的MEMS陀螺仪均采用振动物体传感角速度的概念.利用振动来诱导和探测科里奥利力而设计的MEMS陀螺仪没有旋转部件.不需要轴承, ...

  5. Eclipse被汉化后恢复EN模式

    问题描述: 在安装Flush builder 的时候安装了汉化包,导致Eclipse中功能显示为汉字. 问题解决: 在Eclipse快捷方式下“目标”路径中添加-nl "EN"即可 ...

  6. linux之SQL语句简明教程---UNION

    UNION 指令的目的是将两个 SQL 语句的结果合并起来.从这个角度来看, UNION 跟 JOIN有些许类似,因为这两个指令都可以由多个表格中撷取资料. UNION 的一个限制是两个 SQL 语句 ...

  7. POJ 动态规划题目列表

    ]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...

  8. poj 3233 Matrix Power Series

    A为一个n*n的矩阵,求A+A^2+A^3+...+A^n Sk = A + A2 + A3 + - + Ak       =(1+Ak/2)*(A + A2 + A3 + - + Ak/2  )+{ ...

  9. Android二维码开源项目zxing编译

    ZXing是一个开放源代码的,用Java实现的多种格式的1D/2D条码图像处理库,它包括了联系到其它语言的port.Zxing能够实现使用手机的内置的摄像头完毕条形码的扫描及解码.该项目可实现的条形码 ...

  10. spring boot 中文文档

    https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/VII.%20Spring%20Boot%20CLI/index. ...