寻找最佳路径(如果存在)

时间:2016-11-24 17:01:10

标签: arrays algorithm computer-science

给定参数 k 和数组 [a 0 1 2 3 ,..., n ] ,其中 a x 定义高度对于地形,找到使地形可以通行所需的最少工作量。如果两个相邻位置之间的差异小于或等于 k ,则地形是可通过的。可以更改 a x 处的地形高度,并且所需的工作量等于您所做的高度差。 a 0 n 的高度无法更改,因此某些地形可能完全无法通行。

我一直在努力解决这个问题:这是我到目前为止所想到的:当然找到一个解决方案(不需要考虑最少量的工作)很容易 - 从 a 0 a n ,如图中k = 2(红点是旧地形的高度,灰色的新)。

diagram 1 - unoptimal

(此特定地形的输入为:k = 2,[0,2,3,2,5,4,5,7])

正如您所看到的,新地形并未将旧地形考虑在内,因此将旧地形转换为此地形所需的工作量可能很大。

确定路径是否存在是微不足道的:k> = | a 0 -a n | / n,但我不知道我该怎么回事找到最佳解决方案。

3 个答案:

答案 0 :(得分:2)

使用单纯形法解决以下线性程序。

    WorkbookSettings wbs = new WorkbookSettings(); 
    wbs.setExcelRegionalSettings("GB");
    wbs.setExcelDisplayLanguage("GB");
    Locale l = new Locale("en_GB");
    wbs.setLocale(l);
    wbs.setEncoding("ISO8859_1");


    Workbook workbook = Workbook.getWorkbook(new File("experimental-in.xls"), wbs);

答案 1 :(得分:1)

一个强力解决方案是这样的 对于每个元素,考虑三个下一个状态,一个具有h + 1,h + 0,h-1,其中h是元素的高度。现在继续遍历数组并看到以下几点 1)如果状态已经到达,则丢弃它(因此为此制作位掩码dp)

2)如果你到达一个被遍历的相邻元素diff不是k的状态,则丢弃它。

3)如果到目前为止完成的工作总量超过最低要求,则将其丢弃。

答案 2 :(得分:0)

设ht = an-a0总高度。设hAverageStep = ht / n。而k是最大的一步。

理想情况下,在步骤'i',高度差应为i * hAverageStep。在这种情况下,路径只是一个直线。我们希望更接近这一点。

对于步骤'i',你可以观察你是否需要一些“工作”来将它移动到直线上。如果该工作大于k,您还必须移动其他点,例如以前您工作不够的一些点。

如果在移动每个点之后仍然没有达到“一个”,那么就没有解决方案了。