【发布时间】:2015-04-22 10:33:53
【问题描述】:
我有一个作业问题
给定一组 n 个二维矩形。你需要找到一个 矩形子集的最大可能包装。通过包装我们 意味着将一个较小的矩形 Ri 放在一个较大的矩形 Rj 中,如果 尺寸符合这样做。例如,如果有四个 矩形 R1(2,3),R2(2,4),R3(4,5) 和 R4(5,7) 然后是最大的 可能的包装尺寸为 3,即 {R4
我将通过比较尺寸并计算一个矩形是否具有较小的尺寸来解决这个问题,以便将其打包。
现在作为一名学习者,我的问题是由于存在这句话“设计动态规划算法”,必须采取什么不同的方法 对我来说,这句话不会影响我的方法。我的意思是解决这个问题的唯一线索就是我提到的那个。
需要协助。
我使用了以下代码;
package com.example.testing;
import java.util.ArrayList;
import java.util.List;
public class RectangleTest {
public double height;
public double width;
public RectangleTest(double width, double height){
this.width = width;
this.height = height;
}
public boolean canPutInside(RectangleTest r){
if (this.width < r.width && this.height < r.height)
return true;
else
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<RectangleTest> rectangles = new ArrayList<RectangleTest>();
rectangles.add(new RectangleTest(2 , 3 ));
rectangles.add(new RectangleTest(2 , 4 ));
rectangles.add(new RectangleTest(4 , 5 ));
rectangles.add(new RectangleTest(5 , 7 ));
rectangles.add(new RectangleTest(8 , 3 ));
rectangles.add(new RectangleTest(26 , 4 ));
rectangles.add(new RectangleTest(44 , 5 ));
rectangles.add(new RectangleTest(5 , 1 ));
rectangles.add(new RectangleTest(2 , 31 ));
rectangles.add(new RectangleTest(21 , 4 ));
rectangles.add(new RectangleTest(6 , 51 ));
rectangles.add(new RectangleTest(7 , 7 ));
rectangles.add(new RectangleTest(12 , 3 ));
rectangles.add(new RectangleTest(31 , 4 ));
rectangles.add(new RectangleTest(4 , 33 ));
rectangles.add(new RectangleTest(1, 7 ));
int highestPackaging = 0;
for(int i = 0 ; i < rectangles.size() - 1 ; i++){
int count = 1;
for(int q = i +1 ; q < rectangles.size() ;q++){
if(rectangles.get(i).canPutInside(rectangles.get(q)))
{
count++;
}
}
if(highestPackaging < count){
highestPackaging = count;
}
}
System.out.println("Highest packaging size = "+ highestPackaging);
}
}
【问题讨论】:
-
你能详细说明你正在尝试的方法吗?这听起来有点贪婪(不确定,没有太多细节),你确定它是最优的吗?
-
我想我只是得到蛮力..我要检查类似 if(this.height
-
对我来说,你似乎在做一个贪婪的方法——这对我来说不是最佳选择
-
我不确定我是否完全理解了这个问题,你能更好地定义输入吗?
-
大致意思是可以表示为一种递归算法,利用“小问题”的最优解(最优子结构)最优地解决“大问题”,而一些“小问题”是多次生成的次(重叠的子问题)。你的算法应该有这种形式。通常递归/记忆被重写为循环和数组。
标签: java algorithm dynamic-programming