金矿模型之DP学习
来源:互联网 发布:苹果装机必备软件 编辑:程序博客网 时间:2024/06/09 17:02
http://www.cnblogs.com/sdjl/articles/1274312.html
分析:采用作者介绍方法,很容易写出状态转移方程。
假设-有N个金矿,总共people个人、对于金矿i来说需要need[i]个人可以得到gold[i]个金子
状态转移方程:f(people, mine)表示people个人mine个金矿能得到的最大金子数
有状态方程写出递归代码:
int f(int people, int mine) { if(mine == 0) { if(people >= need[0]) return gold[0]; else return 0; } else { int noMine = f(people, mine - 1); int hasMine = f(people-need[mine], mine - 1) + gold[mine]; return max(noMine, hasMine); }}
上述代码没有记录表,因此是个纯递归的过程,不算dp。
添加记录表maxGold[people][mine]表示people个人在mine个金矿中能得到的最大金子数
int maxGold[N_people][N_mine];//初始化为INT_MINint f(int people, int mine) { if(maxGold[people][mine] != INT_MIN) return maxGold[people][mine]; if(mine == 0) { if(people >= need[0]) { maxGold[people][mine] = gold[0]; return gold[0]; } else { maxGold[people][mine] = 0; return 0; } } else { int noMine = f(people, mine - 1); int hasMine = f(people-need[mine], mine - 1) + gold[mine]; int max = max(noMine, hasMine); maxGold[people][mine] = max; return max; }}
代码不好看,改善如下:
int maxGold[N_people][N_mine];//初始化为INT_MINint f(int people, int mine) { if(maxGold[people][mine] != INT_MIN) return maxGold[people][mine]; int max = INT_MIN; if(mine == 0) { if(people >= need[0]) { max = gold[0]; } else { max = 0; } } else { int noMine = f(people, mine - 1); int hasMine = f(people-need[mine], mine - 1) + gold[mine]; max = max(noMine, hasMine); } return max;}写完发现跟作者写的差不多呀
如何记录金矿选择情况咧? 动态规划对于最优路径的记录貌似不给力呀
-----待解决-----
0 0
- 金矿模型之DP学习
- DP 通过金矿模型介绍动态规划
- 金矿模型温习
- 动态规划 - 金矿模型
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- 通过金矿模型介绍动态规划
- C/C++为什么总喜欢用u16 u8 这样的声明类型啊
- mysql笔记4
- UITableView reloadData的正确方法
- func_get_arg,func_get_args,func_num_args实现PHP伪重载
- 朴素贝叶斯分类器
- 金矿模型之DP学习
- UITextField监控输入文字变化方法
- 如何处理好职场中的人际交往
- ATS源码多线程框架启动分析笔记
- RequestContextListener与ContextLoaderListener的区别
- 主流行式数据库评测:DB2 9.7企业版
- Guarded Suspention 要等到我准备好
- 绘图时,根据size()和自定义rect编程的区别
- linux问题 执行sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory