此帐号已被封,内容无法查看 此帐号的内容被自由微信解封
文章于 2022年1月15日 被检测为删除。
查看原文
被微信屏蔽
其他

【秃头】奋斗逼最少可以休息几天

正经兔 正经兔 2022-01-15


996的未来是什么?


是升职加薪吗?


是年入百万吗?


是财务自由、40岁光荣退休衣食无忧吗?




错!以上全错!996的未来,是007



除了非暴力不合作之外,还有很多抗争方式



好了,回归到正题。前几天碰到了一道关于奋斗逼的题,题目是这样的:



由于表现突出,公司给奋斗逼小Q放了N天假。但作为一个奋斗逼,小Q不打算全部休息,而是上班、健身或休息,但会按照以下规则:不连续两天工作,也不连续两天健身(嗯,可能是怕猝死吧)。并且,只有在公司开门时才能去上班、健身房营业时才能去健身,每天也只能在上班/健身/休息中做一件事。已知公司和健身房的营业时间(1代表营业,0代表休业),求奋斗逼小Q最少能在这期间休息几天。


例:company=[1,1,0,0], gym=[0,1,1,0]  

答案:2

解释:班、健、休、休 或 班、休、健、休



果然是个奋斗逼,放假了还考虑去上班。不过显然,他的觉悟还不够高,上班为什么不能连续两天?为了民族复兴、为了赶英超美,奋斗逼应该连续工作200天。如果做不到,那就是思想路线有问题,一定通美通英通日,受到了资产阶级自由化思想的腐蚀!


从做题的角度来看,这道题是简单的,很显然是动态规划,应该以当天做什么来分类设三个数组work、exercise、rest,记录如果当天是上班/健身/休息的话最少可以休息几天。显然可知,它们之间的状态转移关系是这样的:


rest[n]=min(rest[n-1],work[n-1],exercise[n-1])+1

公司开门:work[n] = min(rest[n-1],exercise[n-1]) 

健身房开门:exercise[n] = min(rest[n-1],work[n-1])

最终答案:rest[N],work[N],exercise[N]中的最小值

如果公司或健身房不开门,对应的work[n],exercise[n]其实是不存在的,可以设为N。



这时候空间复杂度是O(N),但其实一看,第n天只和第n-1天相关,所以只要保存前一天的值就可以了,压缩到O(1),所以就变成了这样:


class Solution: """ @param company: Company business @param gym: Gym business @return: Find the shortest rest day """ def minimumRestDays(self, company, gym): l=len(company) work,exercise,rest=0,0,0 for i in range(l): work_tmp,exercise_tmp=l,l if gym[i]==1: exercise_tmp=min(work,rest) if company[i]==1 : work_tmp=min(exercise,rest) rest=min(work,rest,exercise)+1 work=work_tmp exercise=exercise_tmp return min(work,exercise,rest)



这样就搞定了。那么为什么标题说秃头呢?


因为只要你像本宝宝一样多在业余时间学习、做题,你的头发就会和我一样少……



相关阅读:

敲除结直肠癌基因的昆明小学生陈灵石可能是美国人

【打爆奋斗逼】我现在是一个很积极的人……

当前提倡、纵容和默认996之人的邪恶本意

为什么大家都应该反对996等资方的各种压迫,即使你根本不996?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存