寻找最便宜的门票组合

时间:2018-03-09 20:40:22

标签: algorithm linear-programming

我正在编写一个网络应用程序,以帮助通勤者根据他们一个月内的旅行次数确定每日通勤购买的最便宜的门票组合。

我已经做了很多阅读,但我仍然不太确定如何实现这一点。我认为它可能类似于the knapsack problem或某些other问题,但我仍然觉得答案很混乱。

有三种故障单类型:

单程:$ 6.50

10次旅行:$ 49.80

每月通行证:$ 149.40

我希望能够计算总票价最低的票的组合,这些票价涵盖了通勤者每月的特定行程次数。

示例:

对于一个月内的12次旅行,最便宜的组合是一次10次旅行通行证和两次单次通行证,共计62.80美元。

是否有人能够指出我正确的方向(使用伪代码或其他方式)我将如何实现这一点?提前致谢! :)

1 个答案:

答案 0 :(得分:0)

解释

正如sascha在评论中提到的那样,我实际上能够相当简单地实现这一点。

n 作为总行程次数:

  • 使用的十张旅行票的数量是(n%10)
  • 使用整数除法的单张票数(n / 10)
  • 如果这些门票的总费用高于每月门票的费用,请使用月票。

代码

for (i = 0; i < Math.floor(totalNumTrips / 10); i++) {
    ticketsToBuy.push(TicketType.TenTrip);
    cost += tenTripPrice;
}

for (i = 0; i < totalNumTrips % 10; i++) {
    ticketsToBuy.push(TicketType.Single);
    cost += singlePrice;
}

if (monthlyPrice < cost) {
    return {
        tickets: [TicketType.Monthly],
        cost: monthlyPrice,
    };
}
return {
    tickets: ticketsToBuy,
    cost: cost,
};

希望这对某人有帮助!