描述
由于業績優秀,公司給小Q放了 n 天的假,身為工作狂的小Q打算在假期中工作、鍛煉或者休息。他有個奇怪的習慣:不會連續兩天工作或鍛煉。只有當公司營業時,小Q才能去工作,只有當健身房營業時,小Q才能去健身,小Q一天只能干一件事。給出假期中公司,健身房的營業情況,求小Q最少需要休息幾天
1為營業 0為不營業
在線評測地址:lintcode領扣
樣例1
輸入: company=[1,1,0,0],gym=[0,1,1,0]
輸出: 2
樣例解釋: 小Q可以在第一天工作,第二天或第三天健身,小Q最少休息2天。
源代碼
class Solution:
"""
@param company: Company business
@param gym: Gym business
@return: Find the shortest rest day
"""
def minimumRestDays(self, company, gym):
# dp[i][j]: ith day, activity j. 0 = rest, 1 = work, 2 = gym
dp = [[float('inf')] * 3 for _ in range(len(company))]
dp[0][0] = 1
if company[0]:
dp[0][1] = 0
if gym[0]:
dp[0][2] = 0
for i in range(1, len(company)):
dp[i][0] = min(dp[i - 1][0], dp[i - 1][1], dp[i - 1][2]) + 1
if company[i]:
dp[i][1] = min(dp[i - 1][0], dp[i - 1][2])
if gym[i]:
dp[i][2] = min(dp[i - 1][0], dp[i - 1][1])
return min(dp[len(company) - 1][0], dp[len(company) - 1][1], dp[len(company) - 1][2])
更多題解參考:leetcode/lintcode題解