动态规划学习第一篇~
来源:互联网 发布:中国公知奇葩言论 编辑:程序博客网 时间:2024/06/12 09:39
斐波那契和动态规划的抱抱~
/**爬楼梯问题(斐波那契数列动态规划)*/#include <iostream>#include <cstdio>#include <cmath>using namespace std;/*动态规划法 : (Dynamic Programming 简称DP)要素 : 最优子结构 具体体现 fib(n-1) + fib(n-2) = fib(n); 重叠子问题 具体体现 由递归树可知a1 = 1, a2 = 2, a3 = 3, a4 = 5, a5 = 8, a6 = 13, a7 = 21 ......借助数组,从左往右依次求解*///fun_1()时间复杂度o(n), 空间复杂度o(n);void fun_1(int n){ int a[n+1]; a[1] = 1; a[2] = 2; for (int i=3; i<=n; i++) { a[i] = a[i-1] + a[i-2]; } cout << a[n] << endl;}/*状态压缩 :又称滚动数组、 滑动窗口(sliding window), 是一种优化动态规划的空间复杂度a[i] 只与 a[i-1] 和 a[i-2] 有关, 能不能用几个临时变量来代替这个数组呢~*///fun_2)() 时间复杂度o(n), 空间复杂度o(1);void fun_2(int n){ int a, b, c; a = 1; b = 2; if (n == 1 || n == 2) { cout << n << endl; return ; } for (int i=3; i<=n; i++) { c = a + b; a = b; b = c; } cout << c << endl;}//赠品 : 根据斐波那契数列通项公式和几个数学函数解决//fun_3() 空间复杂度o(1), 时间复杂度o(log2(n));void fun_3(int n){ n++; cout << floor(1 / sqrt(5) * (pow((1 + sqrt(5)) / 2, n) - pow((1 - sqrt(5)) / 2, n))) << endl;}int main(){ int n; while (scanf("%d", &n) != EOF) { fun_1(n); fun_2(n); fun_3(n); } return 0;}//别的方法 :1.待定系数 2.多元线性方程组 3.矩阵高次幂......
动态规划是一种算法设计策略,用于多阶段决策的最优解问题,常见有公式类、经典类、竞赛类......
好吧, 我开始重新学习dp了,骚年,,加油吧~~
0 0
- 动态规划学习第一篇~
- 学习动态性能表第一篇--v$sysstat
- 学习动态性能表 第一篇--v$sysstat
- servlet学习(第一篇)
- 多线程学习第一篇
- 第一篇学习日记
- 第一篇PHP学习
- android 学习第一篇
- wordpress 学习第一篇
- 学习android第一篇
- Linux学习第一篇
- Linux学习第一篇
- android学习第一篇
- lucene学习第一篇
- latex学习第一篇
- 学习JBPM-第一篇
- C++学习第一篇
- maven 学习第一篇
- leetcode:Top K Frequent Elements
- sublime函数跳转插件ctags安装
- SQL取得列的类型
- Android中Context详解 ---- 你所不知道的Context
- C. Beautiful Numbers
- 动态规划学习第一篇~
- 198. House Robber
- 类(Classes)
- 关于pig使用的部分记录
- Kafka三款监控工具比较
- 用户登录
- SoapUI 笔记13 JDBC请求
- 空间换时间-替换空格
- gcc编译出现:致命错误,没有输入文件