找零钱
来源:互联网 发布:淘宝产品销售方案 编辑:程序博客网 时间:2024/04/29 07:59
有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。
给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。(最少几张)
测试样例:
[1,2,4],3,3
返回:2
class Exchange {public: //要找的钱数aim,货币种类n,货币数组penny int countWays(vector<int> penny, int n, int aim) {// 优化过后的动态规划 if (n == 0 || aim == 0) return 0; int dp[n][aim+1];//要找的钱数为0-aim,所以是aim+1种 for (int i = 0; i < n; i++){//找钱为0,方法只有一种,不使用任何货币 //设置第一列的数目,全部为1 dp[i][0] = 1; } for (int i = 1; i <= aim; i++) //只使用penny[0]货币情况下,组成的方法数 //设置第一行的数目 { if (i % penny[0] == 0){ //aim为penny[0]整数倍的位置才能被penny[0]组成 dp[0][i] = 1; }else{ //其他位置只有enny[0]不能组成 dp[0][i] = 0; } } for (int i = 1; i < n; i++){ //设置其他行和列 for (int j = 1; j <= aim; j++){ if (j-penny[i]>=0){ //包括货币面值为penny[i]的方法数 dp[i][j] = dp[i-1][j] + dp[i][j-penny[i]]; }else{ dp[i][j] = dp[i-1][j]; //不包括penny[i]的方法数 } } } return dp[n-1][aim];//编号从0开始,所以最后一个货币种类为n-1 }};
阅读全文
0 0
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱!
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱
- 动态归化 找零钱
- 找零钱问题
- 百度地图应用
- AndroidStudio 进行 JNI / NDK 开发:初步配置及使用
- 阿拉伯数字转成汉字
- 深入学习微框架:Spring Boot
- 状压DP + 最短路 HDU 4856
- 找零钱
- Git标签管理
- Controller和@RestController的区别
- 经典排序算法--插入排序
- junit+springMVC单元测试异常:org.apache.shiro.UnavailableSecurityManagerException
- Android webkit,webview和chrome的关系
- JDBC简单的增删改查
- [CDH--版本要求]--CDH 5和Cloudera Manager 5要求和支持的版本
- Android 三大图片框架介绍