【Python算法】:假期

由于业绩优秀,公司给小Q放了 n 天的假,身为工作狂的小Q打算在在假期中工作、锻炼或者休息。他有个奇怪的习惯:不会连续两天工作或锻炼。只有当公司营业时,小Q才能去工作,只有当健身房营业时,小Q才能去健身,小Q一天只能干一件事。给出假期中公司,健身房的营业情况,求小Q最少需要休息几天。

输入描述:
第一行一个整数 表示放假天数
第二行 n 个数 每个数为0或1,第 i 个数表示公司在第 i 天是否营业
第三行 n 个数 每个数为0或1,第 i 个数表示健身房在第 i 天是否营业
(1为营业 0为不营业)

输出描述:
一个整数,表示小Q休息的最少天数

输入例子1:
4
1 1 0 0
0 1 1 0

输出例子1:
2

例子说明1:
小Q可以在第一天工作,第二天或第三天健身,小Q最少休息2天

============================================================================
算法思路

题目中的工作、锻炼和休息可以看作三种状态,每天做的事情,就是在状态间转移,有如下状态转移关系(其中工作和锻炼的下一个状态不能使自己,休息可以回到自己):
在这里插入图片描述
因为,下一个状态总是只和前一状态相关。
我们做如下假设,设a是截止至橙色区域最大非休息天数,b是截止至绿色区域最大非休息天数,现依据a和b推算灰色区域的最大非休息天数c,若有f(a,b,x,y)=c,则,f(b,c,x,y)=d。
我们根据a、b、x、y推算出下一个最大非休息天数c,则进一步可以根据b、c、x、y,以此类推,可迭代出最大非休息天数。(也就是每一次都保留,目前的最大非休息天数和上一次的最大非休息天数)
在这里插入图片描述
根据以上假设,我们可以做如下推演,我们假设b最后落在状态“锻炼”上,用状态“工作”去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值