动态规划初步
来源:互联网 发布:gson对复杂的json解析 编辑:程序博客网 时间:2024/05/16 15:58
动态规划之钢条切割
动态规划的设计
1. 刻画最优解的结构特征
2. 递归地定义最优解的值
3. 计算最优解的值,通常采用自底向上的方法
4. 利用计算的信息构造一个最优解
钢条切割
不同长度的的钢条,价格不同,切割钢条使价格最高:
长度与价格相关表如下:
长度i
1
2
3
4
5
6
7
8
9
10
价格pi
1
5
8
9
10
17
17
20
24
30
设有一段钢条长度为 n,求其最大的价格。
递归方法(自顶向下)
public class CutBars {public static void main(String[] args) {int[] p={-1, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30};int count = 0;count =cut(p, 10);System.out.println(count);}public static int cut(int[] p, int n){if(n==0){return 0;}int q = -1;for(int i = 1; i<=n; i++){q = max(q,p[i]+cut(p,n-i));}return q;}public static int max(int a, int b){if(a>=b)return a;else return b;}}
评价:极其浪费时间做了多次的重复运算。O(2^(n-1))
自底向上动态规划方法:
public classCutBars2 { public static void main(String[] args) { int[] p={-1, 1, 5, 8, 9,10, 17, 17, 20, 24, 30}; int count[]; count= cut(p, 10); for(int i: count){ System.out.println(i); } } public static int[] cut(int[] p, int n){ int[] r ={0,0,0,0,0,0,0,0,0,0,0}; int q; for(int j=1; j<=n; j++){ q= -1; for(int i=1; i<=j; i++){ q= max(q, p[i] + r[j-i]); } r[j]= q; } return r; } public static int max(int a, int b){ if(a>=b)return a; else return b; } }
评价:效率比较高为O(N*N)
0 0
- 动态规划初步
- 动态规划初步探索
- nyoj_853动态规划-初步
- 动态规划初步
- 动态规划初步
- 动态规划初步
- 动态规划初步
- 动态规划初步
- 动态规划初步
- 动态规划初步
- 动态规划初步
- 动态规划初步学习笔记
- 第九章 动态规划初步
- hdu 1159 动态规划初步
- 动态规划初步学习-hdu4800
- 动态规划初步进阶(一)
- 动态规划初步csu 1587
- 动态规划初步-数塔问题
- 一摞烙饼的排序----《编程之美》读书笔记
- JS append
- javascript动态添加div
- Ubuntu 配置hbase修改profile文件后不能登录桌面解决方法
- C++ 多态性与虚函数
- 动态规划初步
- c#一道面试题类
- Android* 操作系统上的应用程序远程调试
- linux下matlab的安装
- IntelliSense: #error 指令: Please use the /MD switch for _AFXDLL builds
- AutoCompleteTextView监听器的一些用法
- 推荐一个耐心好的大婶
- Pat(Advanced Level)Practice--1079(Total Sales of Supply Chain)
- 多进程log4cxx区分日志