求一个算法思路。。。。高手来啊

时间:2022-03-27 05:43:19
我想把一个长方形的板分割成,宽度长度各不同的小块,比如说一张长100宽50的,我想分成长10宽2的M张,长20宽30的N张。。。。。等等,怎么才能正好分光,或者剩下的正好等于其中的一种类型块

13 个解决方案

#1


m*x1 + n*x2 = 100
m*y1 + n*y2 = 50

#2


汗,这也太简单了吧,我这是一个线形切割问题,根据我的数据量来算,至少有几百万种组合,要找到最优化的一种方法,照你的方法我光定义变量就要累死我了。。。

我那后面还有个省略号啊。大哥。。。。。

#3


如果可以用来选择切割的方块种类不定的话,这个问题有解么?

#4


就是没有固定的解决办法,所以要求最优的。。

贪婪算法我不会啊。。。。用那个什么模拟退火的我都没接触过。。。

谁告诉我啊

#5


lz 想多啦!!
想点实际点的啦 !!!
------------
比如说一张长100宽50的,我想。。。。。
--------------------
要是数字一换 长100m 宽50m   
那要算出来的话 都要很半天
哈哈
更不要是说 
分成长10宽2的M张,长20宽30的N张。。。。
哎!!!
想太多啦 !!

#6


“我想把一个长方形的板分割成,宽度长度各不同的小块,比如说一张长100宽50的,我想分成长10宽2的M张,长20宽30的N张。。。。。等等,怎么才能正好分光,或者剩下的正好等于其中的一种类型块”是不是应该换个问法,怎么分能够让余料最少,能够正好分完的可能性比较小(一般余料不会等于零)。

运筹学里的下料问题,应该算比较简单的下料问题(线性的),其实就是求方程组的最优解,有现成东西可以用,比如Matlab.

#7


int all_l = int.Parse(this.textBox1.Text.Trim());
            int all_w = int.Parse(this.textBox2.Text.Trim());
            int first_l = int.Parse(this.textBox3.Text.Trim());
            int first_w = int.Parse(this.textBox4.Text.Trim());
            int second_l = int.Parse(this.textBox5.Text.Trim());
            int second_w = int.Parse(this.textBox6.Text.Trim());
            int m =0;
            int n =0;

            int all_area = all_l * all_w;
            int first_area = first_l * first_w;
            int second_area = second_l * second_w;
            int allforfirst = all_area / first_area;
            string rstr = "";
            int firstallarea = 0;
            int secondallarea = 0;
            for (int i = 0; i < allforfirst; i++)
            {
                firstallarea = i * first_area;
                secondallarea = all_area - firstallarea;
                m = i;
                n = secondallarea / second_area;
                if (secondallarea % second_area == 0)
                {
                    rstr += "m=" + m.ToString() + ";  n=" + n.ToString() + "\n";
                }
            }
            this.label5.Text = rstr;

#8


这个是按照都是整数而且不考虑分割的效果写的
如果要考虑分割,还要对每组数据进行分割的验证

#9


LZ告诉你如果你说的是就切割  不用拼凑的话  一种方法都没有  哎   高中数学补习一下吧

#10


你玩过俄罗斯方块的游戏吗,你的想法我觉得和那个游戏的思路差不多,只是分割的方块的大小不一样,和这种尺寸的方块的数量不一样。但是如何更合理的去分隔,我觉得还是有些难度的,要考虑更细致,算法会非常复杂,希望你能解决这个问题。

#11


学习,路过

#12


反过来思考,组合数学中的铺路问题?已知砖头的形状,和路的宽度长度,求铺路的方案数。

#13


编码与数学的紧密结合

#1


m*x1 + n*x2 = 100
m*y1 + n*y2 = 50

#2


汗,这也太简单了吧,我这是一个线形切割问题,根据我的数据量来算,至少有几百万种组合,要找到最优化的一种方法,照你的方法我光定义变量就要累死我了。。。

我那后面还有个省略号啊。大哥。。。。。

#3


如果可以用来选择切割的方块种类不定的话,这个问题有解么?

#4


就是没有固定的解决办法,所以要求最优的。。

贪婪算法我不会啊。。。。用那个什么模拟退火的我都没接触过。。。

谁告诉我啊

#5


lz 想多啦!!
想点实际点的啦 !!!
------------
比如说一张长100宽50的,我想。。。。。
--------------------
要是数字一换 长100m 宽50m   
那要算出来的话 都要很半天
哈哈
更不要是说 
分成长10宽2的M张,长20宽30的N张。。。。
哎!!!
想太多啦 !!

#6


“我想把一个长方形的板分割成,宽度长度各不同的小块,比如说一张长100宽50的,我想分成长10宽2的M张,长20宽30的N张。。。。。等等,怎么才能正好分光,或者剩下的正好等于其中的一种类型块”是不是应该换个问法,怎么分能够让余料最少,能够正好分完的可能性比较小(一般余料不会等于零)。

运筹学里的下料问题,应该算比较简单的下料问题(线性的),其实就是求方程组的最优解,有现成东西可以用,比如Matlab.

#7


int all_l = int.Parse(this.textBox1.Text.Trim());
            int all_w = int.Parse(this.textBox2.Text.Trim());
            int first_l = int.Parse(this.textBox3.Text.Trim());
            int first_w = int.Parse(this.textBox4.Text.Trim());
            int second_l = int.Parse(this.textBox5.Text.Trim());
            int second_w = int.Parse(this.textBox6.Text.Trim());
            int m =0;
            int n =0;

            int all_area = all_l * all_w;
            int first_area = first_l * first_w;
            int second_area = second_l * second_w;
            int allforfirst = all_area / first_area;
            string rstr = "";
            int firstallarea = 0;
            int secondallarea = 0;
            for (int i = 0; i < allforfirst; i++)
            {
                firstallarea = i * first_area;
                secondallarea = all_area - firstallarea;
                m = i;
                n = secondallarea / second_area;
                if (secondallarea % second_area == 0)
                {
                    rstr += "m=" + m.ToString() + ";  n=" + n.ToString() + "\n";
                }
            }
            this.label5.Text = rstr;

#8


这个是按照都是整数而且不考虑分割的效果写的
如果要考虑分割,还要对每组数据进行分割的验证

#9


LZ告诉你如果你说的是就切割  不用拼凑的话  一种方法都没有  哎   高中数学补习一下吧

#10


你玩过俄罗斯方块的游戏吗,你的想法我觉得和那个游戏的思路差不多,只是分割的方块的大小不一样,和这种尺寸的方块的数量不一样。但是如何更合理的去分隔,我觉得还是有些难度的,要考虑更细致,算法会非常复杂,希望你能解决这个问题。

#11


学习,路过

#12


反过来思考,组合数学中的铺路问题?已知砖头的形状,和路的宽度长度,求铺路的方案数。

#13


编码与数学的紧密结合