VS 排序思考与实现——动态规划(四)
来源:互联网 发布:360域名放在中国 编辑:程序博客网 时间:2024/05/17 03:40
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划.百度百科
在算法的学习中,动态规划的思想是其中尤为重要也具有一定难度的部分,它的灵活使用将会帮助我们解决很多复杂的大问题。在算法中动态规划解决的主要是多个连锁问题的选择,如:路线的规划,最优策略的组合等。
在动态规划中,最为经典的习题就是0-1背包的问题,下面是我用C#实现的代码,用到了物品个数n,一维数组Weights记录每个物品的重量,Values数组记录每个物品的价值。最后使用一个二维数组C[i][w]以备忘的方式来记录当前状况下背包的最大价值。
namespace Knapsack_problem{public partial class Form1 : Form //注:以下为不可分割的 0-1 背包问题{ int[] Weights = new int[] { 3, 4, 7, 8, 9 }; //设置物品重量int[] values = new int[] { 4, 5, 10, 11, 13 }; //设置物品价值//设置备忘录public Form1(){ InitializeComponent();}private void Form1_Load(object sender, EventArgs e) //初始化{ for (int i = 0; i <= values.Length - 1; i++) //显示物品价值{ label3 .Text += values[i]+ " ";} for (int i = 0; i <= Weights.Length - 1; i++) //显示物品重量{ label4.Text += Weights[i] + " ";}}private void button1_Click(object sender, EventArgs e) //计算背包最大价值{int i, w;int W = Convert.ToInt32(txtCapacity.Text); //获取背包容量int[] totval = new int[W + 1]; // 存贮最大的总价值int[] best = new int[W + 1]; // 存贮当前价值最高的物品int n = values.Length; //设置物品个数int[][] c = new int[n + 1][]; //初始化二维数组for (i = 0; i <= n; i++){ c[i] = new int[W + 1]; }for (w = 0; w <= W; w++){ c[0][w] = 0; }for (i = 1; i <= n; i++){ c[i][0] = 0; for (w = 1; w <= W; w++) { if (Weights[i - 1] <= w) { if (values[i - 1] + c[i - 1][w - Weights[i - 1]] > c[i - 1][w]) { c[i][w] = values[i - 1] + c[i - 1][w - Weights[i - 1]]; } else { c[i][w] = c[i - 1][w]; //测试C4,10状况 } } else c[i][w] = c[i - 1][w]; } }label1.Text = "背包的最大价值: " + c[n][W]; }}}}
代码已经实际运行,若是有更好的优化想法欢迎大家留言,荣幸与您分享~
阅读全文
0 0
- VS 排序思考与实现——动态规划(四)
- VS 排序思考与实现——整理分析(一)
- 动态规划入门(四)DP 基本思想与实现
- 动态规划总结与思考
- 选球博奕与动态规划(四)
- (四)动态规划
- 回朔法与动态规划的思考
- 回朔法与动态规划编程题思考
- 算法课笔记系列(四)—— 动态规划
- 动态规划—矩阵乘法排序
- 算法分析与设计(四)动态规划(二)
- 浅谈动态规划(四)
- 动态规划入门(四)
- 动态规划的思考(1)
- 动态规划的思考(2)
- 动态规划的思考(三)
- 动态规划思考1
- 动态规划思考2
- Linux中gdb 查看core堆栈信息
- 都在说微服务,那么微服务的反模式和陷井是什么(一)
- Java多线程的三种实现方式(重点看Collable接口实现方式)
- (HDU
- 17. 数据结构进阶十七排序实现之归并排序
- VS 排序思考与实现——动态规划(四)
- 类java作业
- 【bzoj 2038】小Z的袜子(hose) [2009国家集训队]
- Android中.aar文件如何生成?
- i2c驱动--驱动框架
- initial job has not accepted any resources
- [BZOJ1305][CQOI2009]跳舞(二分答案+最大流)
- kettle数据抽取安装及基本操作总结
- 18. 数据结构进阶十八排序实现之快速排序