DP(1)
2016-03-15 16:52
232 查看
动态规划:从新手到专家
我觉得这算一个坑吧。
考虑DP,出发点就是状态,状态方程在状态间跳转。
跟有限状态机一样。
这样来看,跟KMP算法还有些类似。
凑硬币
状态
d(i)表示凑够i元需要的最少硬币数量状态方程
d(i)=min{ d(i-vjv_j)+1 },其中i-vjv_j>=0,vjv_j表示第j个硬币的面值#define INF 10000; int Min[100]; int coins[] = { 1,3,5 }; void find_coins(int value) { //初始化 for (int i = 1; i <= value; i++) Min[i] = INF; //d(i)=min{d(i-V_j)+1} i-V_j>=0, V_j表示第j个硬币的面值 for (int i = 1; i <= value; i++) for (int j = 0; j < 3; j++) if (coins[j] <= i && Min[i - coins[j]] + 1 < Min[i]) Min[i] = Min[i - coins[j]] + 1; //output cout << Min[value] << endl; } int main() { int value; while (cin >> value) find_coins(value); system("pause"); return 0; }
后记
d(i)表示状态,但下标i不自觉的让人联系到循环体下标i。我觉得这算一个坑吧。
考虑DP,出发点就是状态,状态方程在状态间跳转。
跟有限状态机一样。
这样来看,跟KMP算法还有些类似。
相关文章推荐
- common-fileupdown上传
- java 中的单列设计模式
- MySQL数据的备份恢复和还原
- UI进阶——数据请求
- IIS总线
- Firemonkey TListView在Android上的滚动流畅度与其所在的Form里显示的元件数有关
- 使用JUnit4测试Spring
- ContextLoaderListener初始化的前后文和DispatcherServlet初始化的上下文关系
- 在VMware ESXi服务器上配置NAT上网
- JSP自定义标签案例分析
- 多种多样的App主界面Tab实现方法(二):Fragment
- 终极自动更新花生壳动态域名(DDNS)更新方法
- PHPExcel 怎样在单元格里画出斜线边框
- iOS UIView动画实践(三):Transition Animation
- 使用JasperReport+iReport进行WEB开发
- 进程间通信Messenger
- Windows下Vim设置
- 夺命雷公狗---微信开发63----微信开发总结篇
- WebApp与Native App有何区别呢?
- Ubuntu 14.04 LTS 开机启动和计划任务