酒店预订算法

时间:2016-01-12 13:09:37

标签: algorithm

我正在处理酒店预订的问题。这是我的问题。

  1. 如果我预订一天的房间,我将花费200美元。
  2. 如果我预订连续7天的房间,我将花费700美元。
  3. 我知道我将在一个月内旅行,假设我将其输入为数组:

    split

    然后我应该预订7天(1日至7日)和1天(10日)房间,这将花费我900美元。

    我可以使用任何算法来确定如何根据我输入的数组预订酒店吗?

1 个答案:

答案 0 :(得分:2)

我能想到动态编程解决方案:

<强>输入

  • 包含旅行到达天数的数组,A大小为N
  • 入住一天的费率:RATE_DAY
  • 入住一周(7天或更短)的费率:RATE_WEEK

最佳子问题

查找日A[i]的最低费用的问题相当于最低费用:

  • A[i-1] + RATE_DAY
  • 的最低费用
  • A[i-2] + RATE_WEEK的最低费用(如果可能)
  • A[i-3] + RATE_WEEK的最低费用(如果可能)
  • ...
  • A[i-7] + RATE_WEEK的最低费用(如果可能)

在不太正式的术语中,第二天的最佳解决方案是采用另一天的费率,或者以每周费率对其进行分组,比较每周费率的7个可能分组中的每一个,使得当前的一天是其中的一部分。分组。 “(如果可能的话)”部分表示只有在A[i-j]A[i]相同的7天间隔(它们都适合一周)时才应进行此类比较。

这是一种自上而下的动态编程方法。

我用C ++编写了一个小程序来演示:

Demo