322. Coin Change(C++实现)
2016-05-23 21:07
363 查看
递归算法:
动态规划算法:
class Solution { int *dp; vector<int> a; int dfs(int S) { if(dp[S]!=-2) return dp[S]; int ans=-1; for(int i=0;i<a.size();i++) { const int w=a[i]; if(S<w) continue; int tmp=dfs(S-w); if(tmp!=-1) { tmp+=1; if(ans==-1||ans>tmp) ans=tmp; } } return dp[S]=ans; } public: int coinChange(vector<int>& coins, int amount) { if(amount==0)return 0; dp=new int[amount+1]; for(int i=0;i<=amount;i++) dp[i]=-2; dp[0]=0; a=coins; return dfs(amount); } };
动态规划算法:
class Solution { public: int coinChange(vector<int>& coins, int amount) { if(amount==0)return 0; const int n=coins.size(); int *dp=new int[amount+1]; memset(dp,-1,sizeof(int)*(amount+1)); dp[0]=0; for(int i=0;i<n;i++) { const int w=coins[i]; for(int i=amount;i>=0;i--) if(dp[i]!=-1) { for(int j=1;i+j*w<=amount;j++) { int k=i+j*w; if(dp[k]==-1||dp[k]>dp[i]+j) dp[k]=dp[i]+j; } } } return dp[amount]; } };
相关文章推荐
- C语言快排函数qsort()
- C++中map的使用
- 俄罗斯方块和贪吃蛇游戏软件:C语言应用初始感受
- 初次接受c语言程序游戏的感受
- 俄罗斯方块软件:C语言应用初步感受
- 关于俄罗斯方块游戏软件C语言初步感受
- 俄罗斯游戏软件:C语言应用初步感受
- C++作业6
- C++笔记--类型和声明
- 初次接受C语言游戏程序感受
- C++实验6-数组操作
- C++ 标准库的 locale 类用法
- Dos界面 五步棋
- 关于c语言程序的感受
- c++中头文件iomanip
- [C++]关于数据永久化的思考(不使用数据库)
- 山东省第六届ACM大学生程序设计竞赛-Single Round Math(大数除法)
- 2014蓝桥杯C语言B组决赛
- C++ limits头文件
- C++笔记--类型和声明