算法导论-钢条切割 C# 递归实现
下班前看到有位兄弟写 钢条切割问题,尝试实现C#版, 还没有实现最优版,分享一下。
int[] parr; private void button1_Click(object sender, EventArgs e)
{
//策略标准,如 总长度 7 取第1位,6位 , 最优结果是: 18 = 1 + 17
parr = new int[] {
1 , 5 , 8 , 9 , 10 , 17 , 17 , 20 , 45 , 30
}; Stack<int> stack = new Stack<int>(); //总容量
int maxLength = 7 ; int result = compute(parr, maxLength, ref stack);
int c = stack.Count; Console.WriteLine("切割:"); int temp;
while (c-- > 0) {
Console.WriteLine(temp = stack.Pop());
} Console.WriteLine("结果:{0}", result);
}
核心部分:
/// <summary>
///
/// </summary>
/// <param name="p">策略标准</param>
/// <param name="length">分割集合</param>
/// <param name="stack">分割步骤</param>
/// <returns></returns>
int compute(int[] p, int length, ref Stack<int> stack)
{
int price = 0; //最优方案
int maxPrice = 0; //截止目前 本轮最优方案步骤
Stack<int> __stack = null; //临时方案步骤
Stack<int> _stackTemp = null ; int split; if (length == 0)
return 0; for (int i = 1; i <= length ; i++ )
{
if (i >= p.Length)
{
split = p.Length; }
else
{
split = i;
} //临时方案
_stackTemp = new Stack<int>(); price = p[split - 1] + compute(p, length - split, ref _stackTemp); if (maxPrice < price)
{
//新方案
maxPrice = price;
_stackTemp.Push(split); //更新本轮最优方案
__stack = _stackTemp;
}
} //将本轮最优方案添加到全局方案集
while (__stack.Count > 0) {
stack.Push(__stack.Pop());
} //返回最优结果
return maxPrice;
}
结果:

算法导论-钢条切割 C# 递归实现的更多相关文章
- (5千字)由浅入深讲解动态规划(JS版)-钢条切割,最大公共子序列,最短编辑距离
斐波拉契数列 首先我们来看看斐波拉契数列,这是一个大家都很熟悉的数列: // f = [1, 1, 2, 3, 5, 8] f(1) = 1; f(2) = 1; f(n) = f(n-1) + f( ...
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- 算法导论第十八章 B树
一.高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容.前面还留了两章:贪心算法和摊还分析,打算后面再来补充.之前的章节讨论的支持动态数据集上的操作,如查找.插入.删除等都是基于简单的 ...
- 算法导论----VLSI芯片测试; n个手机中过半是好的,找出哪些是好手机
对于分治(Divide and Conquer)的题目,最重要是 1.如何将原问题分解为若干个子问题, 2.子问题中是所有的都需要求解,还是选择一部分子问题即可. 还有一点其实非常关键,但是往往会被忽 ...
- MIT算法导论——第一讲.Analysis of algorithm
本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...
- MIT算法导论——第二讲.Solving Recurrence
本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...
- MIT算法导论——第四讲.Quicksort
本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...
- MIT算法导论——第三讲.The Divide-and-Conquer
本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...
随机推荐
- JAVA入门 第五周 1多项式
1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的 ...
- hdu 5339 Untitled
这题很明显是签到题,可我比赛时却没做出,赤裸裸的爆零了,真悲剧…… 看了题解后才知道直接暴搜就行,只是需要把它们从大到小排序后再搜,我当时就没想到...不想再多说了 一开始我直接枚举所有情况: #in ...
- order by 容易出现的bug记录
写分页查询时遇到一个问题: 在order by create_time 的时候,假设所有数据的create_time 值相同,那么 使用:select * from ( selelct s.*,row ...
- iOS开发 Date转字符串
+ (NSString *)formatterDate:(NSNumber *)desDate WithDateFormatter:(NSString *)formatter{ NSDateForma ...
- go语言实战向导
版权声明:本文由魏佳原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/173 来源:腾云阁 https://www.qclou ...
- 关于OneProxy推广
通过以下关键字 分库分表,读写分离,连接池,跨库查询,开源数据库,MySQL,高性能,并行查询 在搜索引擎中,都找不到OneProxy和OneSQL的影子
- Eclipse全面提速小技巧
转自:http://rongmayisheng.com/post/eclipse%E5%85%A8%E9%9D%A2%E6%8F%90%E9%80%9F 欢迎关注我的社交账号: 博客园地址: http ...
- media query ie8- 兼容实现总结
虽然说响应式设计的理想状态是,需对pc/移动各种终端进行响应:但是现实是高分辨率的pc端与手机终端屏幕相差太大,像电商这样有大量图片和文字信息的同时排版要求精准的页面,设计一个同时适应高分辨率pc又适 ...
- DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析
DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...
- struts2在web.xml中的配置
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2 ...