ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: kowloon

[求助] [求助]如可开料, 最节省?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-3-27 15:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

顶起来,此题应该深入的讨论.

同时也希望狼版\QEE\清风等高人过来看看.

TA的精华主题

TA的得分主题

发表于 2008-3-27 15:51 | 显示全部楼层
QUOTE:
以下是引用彭希仁在2008-3-27 15:39:17的发言:

顶起来,此题应该深入的讨论.

同时也希望狼版\QEE\清风等高人过来看看.

太高抬我了。

 [em04][em04][em04]

贪婪算法只能得到比较优化的解,最优化的方法只有穷举了,但大多情况下是不现实的。

彭兄方法不错,有空琢磨琢磨

TA的精华主题

TA的得分主题

发表于 2008-3-27 16:00 | 显示全部楼层

穷举是不现实的,数据量太大,不知何年何月才能算完.关键是要有一套理论支持,我数学功底,这方面只有靠狼版你了.

TA的精华主题

TA的得分主题

发表于 2008-3-27 16:19 | 显示全部楼层

这个问题我几年前曾琢磨过,当时使用集合解决的,代码很烦琐,效果也不是很好。

套用楼主的例子也是消耗了30根,比彭兄的稍省了一点料,呵呵。

Sub Northwolves()
Application.ScreenUpdating = False
Dim all As New Collection, arr, i As Integer, j As Integer, k As Integer, changdu As Integer, y(), s() As String, t(), n()
arr = Sheet1.[a5:b17]
For i = 1 To UBound(arr)
For j = 1 To arr(i, 2)
all.Add arr(i, 1)
Next
Next
                                             
i = 0
j = 0
Do While all.Count > 0
ReDim Preserve y(1, i)
y(1, i) = 6300
k = 1
Do While k <= all.Count
changdu = all(k)
If changdu <= y(1, i) Then
y(1, i) = y(1, i) - changdu
y(0, i) = y(0, i) & " " & all(k)
j = j + 1
all.Remove k
If all.Count = 0 Then Exit Do
Else
k = k + 1
End If
Loop
s() = Split(Trim(y(0, i)), " ")
ReDim t(0)
ReDim n(0)
t(0) = s(0)
n(0) = 1
If UBound(s) > 0 Then
For k = 1 To UBound(s)
If s(k) = t(UBound(t)) Then
n(UBound(n)) = n(UBound(n)) + 1
Else
ReDim Preserve t(UBound(t) + 1)
ReDim Preserve n(UBound(n) + 1)
t(UBound(t)) = s(k)
n(UBound(n)) = 1
End If
Next
End If
ReDim s(UBound(t))
For k = 0 To UBound(t)
s(k) = t(k) & "*" & n(k)
Next
y(0, i) = Join(s, ",")
y(1, i) = 6300 - y(1, i)
i = i + 1
Loop
Sheet2.[m8].Resize(i, 2) = WorksheetFunction.Transpose(y)
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2008-3-27 16:28 | 显示全部楼层
大规模的优化还是建议采用lingo等优化软件来做。

TA的精华主题

TA的得分主题

发表于 2008-3-27 16:30 | 显示全部楼层

14楼的代码返回以下结果:

2540*2,1080*16160
2540*2,1080*16160
2540*2,1080*16160
2540*2,1080*16160
2540*2,980*1,240*16300
2540*2,980*1,240*16300
2540*2,980*1,240*16300
2540*2,980*1,240*16300
2540*2,840*1,350*16270
2540*2,840*1,350*16270
2540*1,2230*1,1400*16170
2230*2,1720*16180
2230*2,1720*16180
2230*2,1720*16180
2230*2,1720*16180
2230*2,1720*16180
2230*2,1720*16180
1720*3,840*1,240*16240
1720*3,840*1,240*16240
1670*3,840*1,350*16200
1670*2,1620*1,840*1,350*16150
1620*3,1400*16260
1620*3,1400*16260
1620*3,1400*16260
1620*3,1400*16260
1620*3,1400*16260
1620*3,1400*16260
840*2,690*6,350*16170
690*4,350*106260
350*1,330*41670

TA的精华主题

TA的得分主题

发表于 2008-4-7 21:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

各位辛苦了!~

谢谢!~

[此贴子已经被作者于2008-4-7 21:26:04编辑过]

TA的精华主题

TA的得分主题

发表于 2008-4-7 22:19 | 显示全部楼层

我再给加一个条件可以吗?

如果我要开的料是板材呢?

按照面积来计算!~

TA的精华主题

TA的得分主题

发表于 2008-6-15 10:43 | 显示全部楼层

嘿嘿,俺可以用规划求解做到29根

问题是要尝试好多次,继续思考中

TA的精华主题

TA的得分主题

发表于 2008-6-15 11:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

这类问题值得研究,有现实需求。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 00:00 , Processed in 0.048301 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表