关于动态规划算法
来源:互联网 发布:gre数学 知乎 编辑:程序博客网 时间:2024/05/18 02:32
在暴力搜索基础上,增加了记忆机制而减少了时间复杂度,动态规划是一种以空间换时间的快速算法。
经典例题:
找零钱问题:用n种货币,组成aim的钱数,有多少种方法;
法一:
初始化一个二维数组dp[n][aim],行数为n,列数为aim。dp[i][j]含义为用penny[0...i]的货币组成j的钱数有多少种方法。
递归公式:
dp[i][j]=dp[i][i-penny[i]]+dp[i-1][j];
//该方法比较通俗易懂。int countways(vector<int>penny,int n,int aim){//penny存储钱的种类;int dp[n][aim];for(int i=0;i<n+1;i++){dp[i][0]=1;}for(int i=o;i<aim;i++){if(i%penny[0]==0)dp[0][i]=1;elsedp[0][i]=0;}for(int i =0;i<n;i++){for(int j=0;j<aim;j++){if(j>=penny[j])dp[i][j]=dp[i][j-penny[j]]+dp[i-1][j];elsedp[i][j]=dp[i-1][j];}}return dp[n-1][aim];}
法二: 有些晦涩
int countways(vector<int>penny,int n,int aim){int f[1000];memset(f,0,sizeof(f));//memset用于数组清零,从f开始的sizeof(f)长度设置为0;f[0]=1;for(int i=0;i<n;i++){for(int j =penny[i];j<=aim;j++)f[j]+=f[j-penny[i]];}return f[aim];}
阅读全文
0 0
- 关于动态规划算法
- 关于动态规划算法的总结
- 关于动态规划算法的总结
- 关于拼凑面额的动态规划算法
- 算法--动态规划算法
- 关于括号匹配数目的动态规划算法的解决方法
- NOIP算法总结——关于简单 线性动态规划
- 关于动态规划0-1背包的算法
- 关于动态规划
- 关于动态规划
- 关于动态规划
- 关于动态规划问题
- 关于动态规划
- 关于动态规划问题
- 动态规划算法剖析
- 动态规划算法
- 初识动态规划算法
- 动态规划算法
- robot framework ride使用小结
- logsic 回归
- CodeForces 280C 浅谈期望线性性的树上问题实际运用
- Java基础总结-容器
- 第九天-Java集合之一
- 关于动态规划算法
- Java连接redis
- 小白算法练习 NYOJ 星际之门(一) 快速乘幂+cayley的一个定理
- HTML常用标签及其他总结
- 理解BEM的命名方式
- JS 表格节点操作
- 《Java并发编程的艺术》笔记一——并发编程中的概念.md
- 邝斌的ACM模板(求逆元)
- PHP之array_unshift()方法