一道算法题。求高手!重谢

寒飞a 2011-12-04 11:30:37
是一个关于利用率问题的题目

在一个大矩形里 切割 一个 或者 多个规格 的小矩形 ,怎么样切大矩形的利用率是最高的 。
...全文
237 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
moon___star 2011-12-04
  • 打赏
  • 举报
回复
动态规划来做,效果一定不错。
寒飞a 2011-12-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 litaoye 的回复:]
规格不多的话可以枚举,如果有几十个,恐怕就很难算了。


引用 3 楼 luoyehanfei 的回复:
引用 2 楼 litaoye 的回复:
问题本身是NP的,只能找些近似的方法,当然矩形数量不多的情况系可以考虑枚举

把大矩形 和 所要切的规格当作参数传入 。它们既然都有尺寸和数字,应该是能求出最优良的切法的吧。
[/Quote]

嗯,我就是想看看能不能解决这个算法。
绿色夹克衫 2011-12-04
  • 打赏
  • 举报
回复
规格不多的话可以枚举,如果有几十个,恐怕就很难算了。

[Quote=引用 3 楼 luoyehanfei 的回复:]
引用 2 楼 litaoye 的回复:
问题本身是NP的,只能找些近似的方法,当然矩形数量不多的情况系可以考虑枚举

把大矩形 和 所要切的规格当作参数传入 。它们既然都有尺寸和数字,应该是能求出最优良的切法的吧。
[/Quote]
寒飞a 2011-12-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 litaoye 的回复:]
问题本身是NP的,只能找些近似的方法,当然矩形数量不多的情况系可以考虑枚举
[/Quote]

把大矩形 和 所要切的规格当作参数传入 。它们既然都有尺寸和数字,应该是能求出最优良的切法的吧。
绿色夹克衫 2011-12-04
  • 打赏
  • 举报
回复
问题本身是NP的,只能找些近似的方法,当然矩形数量不多的情况系可以考虑枚举
寒飞a 2011-12-04
  • 打赏
  • 举报
回复
我用js写了一段代码 来分页这个题目的需求。大家可以看下,不喜勿喷。 求优良的算法。。。。。。。。。。。。。。
//算法 问题:一张纸按照指定的一个或多个规格分切,怎么样利用率最大 ?

//重点1 :规格分为1个或者多个
//重点2 : 如果是多规格 ,有没有指定没种规格最少需要多少呢 ?还是直接按照最优的切出来就行 ?

/**********函数体************/
//需要准备的参数 ?1 纸张对象 (对象具备宽高属性)
// 2 要切的纸张规格对象 ? 因为具备多种规格,此对象为数组。
// (每个数组的成员为一个对象 具备宽高属性 另,具备一个最少切割数属性)
// oldobj设置 x y属性
//objpar的每个成员有x y 和 conts 属性 x y 表示宽高 conts 表示最少切割数
//分析: 所切矩形面积之和
function Cutpager(oldobj, objpar) {
//首先我们获取原始纸张的宽和高
var owidth = oldobj.x;
var oheight = oldobj.y;
var par = new Array();//此数组用来记录刚好切完的单个最优规格。
//首先我们确定下 如果切完的规格刚好为0.那么此种算法肯定利用率就最大。我们先来一个循环

var iszerno = 0;//记录是否有最小切割数不能为0的 。此时的0是记录有几个最少切割数不能为0的。
for (var i = 0; i < objpar.length; i++) {
//在进行此项操作的时候我们必须要判断,判断对象的最小切割数是不是0,如果规定了必须最少切多少个,肯定不能这样算。
if (objpar[i].conts != 0) { //如果当前对象最小切割输
iszerno++;
}
}
//当循环体执行完毕的时候我们就知道是否有不为0的了。
if (iszerno == 0) { //如果所有的规格并没有规定最少应该切多少个。
//执行第一种排查 将每个规格的元素逐个排查,看能否刚好切割完大的矩形,那么我们就只切这一种纸了。
//这里我们应该做一个正则表达式 来判断一个为正整数的数组 ,还是执行循环。
//循环规格数组
for (var i = 0; i < objpar.length; i++) {
//这里应该把当前规格直接与大的矩形想对比 以 owidth*oheight/(objpar[i].x*objpar[i].y) 判断此值是否为正整数
if ((owidth * oheight) % (objpar[i].x * objpar[i].y) == 0) {
par.push(objpar[i]);
}
}
}
else if (iszerno == 1) {
//这里要考虑规格当中如果只有一种有最少要求切割数。那么它也可以当作唯一的规格来切割。
}
else {
//这里当然就是最少有2个规格都是有最少需要切割的数量,此时,要进行更为复杂算法。
}

}
SuperFC 2011-12-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sanyloveyou1 的回复:]

动态规划来做,效果一定不错。
[/Quote]

我认为DP在这用不好,还是得用纯数学的知识解决。
内容概要:本文研究了一种应用于太阳能发电系统的多级逆变器,旨在通过采用正弦脉宽调制(SPWM)技术有效降低输出电压的总谐波失真(THD),从而提升电能质量。研究基于Simulink平台构建了完整的仿真模型,系统地实现了SPWM信号生成、驱动逻辑控制以及多电平输出波形合成等关键环节,验证了该多级逆变器在不同运行工况下具备优异的动态响应能力和稳定性。仿真结果表明,所设计的逆变器能够输出接近理想正弦波的电压波形,显著抑制高次谐波,满足可再生能源并网对电能质量的严苛要,体现出多级逆变拓扑在光伏发电系统中的技术先进性与工程应用价值。; 适合人群:电气工程、自动化、新能源科学与工程及相关专业的本科生、研究生,以及从事光伏逆变器设计、电力电子变换技术和可再生能源并网系统研发的工程技术人员。; 使用场景及目标:①深入理解多级逆变器的工作原理及其在太阳能发电系统中的关键作用;②掌握SPWM调制技术的理论基础与实现方法,并分析其对改善THD的核心机制;③借助Simulink仿真平台开展电力电子电路的建模、参数调试与性能评估,服务于课程设计、毕业设计、科研课或实际工程项目开发。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作与验证,细致调整调制比、载波频率等关键参数,观察其对输出波形和THD指标的影响,以深化对系统动态特性的理解,并尝试优化控制策略以进一步提升系统性能。
VCF 生成器 Lite v6.0.0:批量导入与功能拓展 VCF 生成器 Lite v6.0.0 正式版已发布,此次更新带来了批量导入手机通讯录这一重要功能,极大地方便了用户整理和管理联系人信息。同时,新增了多项功能,如翻译所有 CLI 内容,让不同语言背景的用户都能更好地使用;verbose 模式新增更多日志信息,有助于用户更详细地了解操作过程。 此外,还添加了多地区号码格式支持,包括中国港澳台地区电话号码格式,满足了不同地区用户的需。当未捕获异常时,系统会自动保存错误日志,并引导用户反馈给开发者,这体现了产品团队对用户体验 的重视,有助于及时发现和解决问。 修复痛点:引号清理与进度条显示问 在修复方面,此次更新解决了引号清理功能在包含换行符时的错误行为,以及自 `v4.3.0` 版本以来的进度条显示问。这些问虽然看似微小,但却影响了用户的使用体验,修复后能让用户更加顺畅地使用 VCF 生成器 Lite。 代码与文档重构:提升可维护性与易用性 在变更方面,将翻译框架迁移到 gettext,提升了 `LANGUAGE` 环境变量 优先级,方便用户根据自己的语言偏好进行设置。在 AI 的指导下重构项目,使得各层次职责更加清晰,代码更加模块化,可维护性更高,这为产品的后续发展奠定了良好的基础。 同时,按 Diataxis 框架重构用户文档,按开发生命周期 重组开发者文档,让用户和开发者都能更方便地获取所需信息,提高了产品的易用性。 编辑观点:VCF 生成器 Lite v6.0.0 的更新在功能、修复和代码文档方面都有显著提升,满足了用户的实际需,增强了产品的竞争力,未来有望在市场上取得更好的成绩。

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧