好的,老实说这是一个家庭作业问题,但我真的尽力找到解决方案,而且我认为我已经部分做了。
问题:
我们获得了一系列城市,其位置仅用一个坐标进行符号化,我们应该向城市实施一定数量的医院,以便每个城市到最近医院的距离总和最小。
也就是说,如果给我们1,3,5,7,9,11,13的城市,如果我们打算放3家医院,医院将分别为3,7,11(实际上可以是这个的最佳解决方案,没有检查)。
我们建议使用动态编程,首先检查我们只实施一家医院的情况。
我已经找到了后续医院的位置。我创建了一个桌子和城市。然后,对于每个单元格,我将当前行的距离放置到已经建立的最近医院或城市到相应列的城市的距离。
例如,如果我们已经将医院实施为1,那就像是:
* - 1-3-5-7-9-11-13
1 | 0 | 0 | 0 | 0 | 0 | 0 0 || |
3 | 2 | 0 | 2 | 2 | 2 | 2 | 2 |
5 | 4 | 2 | 0 | 2 | 4 | 4 | 4 |
..............
然后对列进行求和,找到下一家医院。
问题是,我无法弄清楚我应该建立的第一家医院!!
当我手动添加实际解决方案的一个元素时,我可以得到正确的答案,所以我的部分解决方案应该是真的。
BTW复杂度应为O(CityNum ^ 2),hospitalNum为常数。所以我不能使用暴力。示例输入和输出(来自作业组合):
输入: 10 5(10是城市数,5是医院数)
1 2 3 6 7 9 11 22 44 50(坐标)
输出:
9(最小距离之和)