寻找最优组合的java算法
我有一个算法建模问题,我需要一些帮助。考虑一下: 一个人预先购买了
- 0到5公里x4
- 6至10公里x2
- 11至15公里×8
为了便于理解,让我们分别将这些不同的类型称为A、B、C,这样,此人的计数:
- 4 A的
- 2 B的
- 还有8个C
此人今天想要旅行18公里,可以使用预先购买的机票的任何组合来支付旅行费用。例如,他们可以使用八个C中的两个,相当于最多30公里的行程,或者他们可以使用四个a中的四个,相当于最多20公里的行程
我认为,为了让我的算法有效地选择预购门票的最佳组合,它应该:
- 尽可能减少预购机票总额之间的距离 距离和当前行驶的实际距离 约会李>
- 尽量减少预先购买的机票数量,以覆盖 实际行驶的距离李>
我试过的是: 使用上述示例,其中A、B和C分别为(0到5)、(6到10)、(11到15)kms范围; 此人有: 1.4 A 2.2B的 3.和8 C
让x表示今天的旅行距离。x=18公里
- 第一步:寻找一个x包含边界的范围李>
- 步骤1.2:如果存在这样的范围,则选择该范围李>
- 步骤1.3:将该类型预购机票的数量减少1李>
- 步骤1.4:终止算法李>
- 第2步:如果不存在这样的范围,寻找可用的最大范围李>
- 第三步:用该范围的上限递减x。例x-c(最大值)=18-15李>
- 第4步:将该类型的预购票的数量减少1。7 C.剩下的李>
- 第5步:重新评估x。示例x=x-c(最大)=3李>
- 第六步:转到第一步李>
虽然我的答案提供了一个解决方案,但我不确定这是否得到了优化。我更喜欢O(nlogn)复杂度
谢谢你的帮助
共 (0) 个答案