弱智记录.1
2021-02-27 21:39 作者:スレーブ_スレイヤー | 我要投稿
有的时候不和别人比一下,永远都不知道自己能弱智到什么程度。
问题是:我是一个公司的员工,我有N天的带薪休假,我想要在未来的M天里休尽量长的假,M天中,哪天上班哪天放假是已知的。用程序算出这个最优的方案。
第一眼看到这个问题,居然有百分之50的错误率,想着自己十分钟就能搞定。然而……
当时的思路是爆破,先提取出所有连续工作的天数,作为一个“段”存在一个集合里。如果工作的天数大于N,这一段时间不能用来休假,移出集合。
剩下要做的,就是把假期拆开,塞进集合里的那些段里,枚举出一个最长假期的方案。
然而这个想法从一开始就错了,就算某一段的时间大于N,这一段的某一部分还是可能被用作休假。
这个问题难就难在,需要把假期分成多段来塞到工作日里……段的数量是未知的。可能性太多,总想着设计一个可以适应所有情况的方案,最后写到快脑溢血也没完成。
这应该和算法,数学无关,单纯就是考验逻辑思维,考验一个人解决问题的能力。
不过这个问题也给了我一个启发:
不要试图对具体的情况作出处理。
我一开始想,这还不简单:
直接把带薪休假跟在最长的普通假期后面。
但情况很多,比如给三天假期,然后未来五天里,工作和放假各一天穿插。
这种情况很轻易的击败了我那个逻辑。
然后我改变了想法:
用带薪休假连接两个普通假期,取最长的那个。
然而这个逻辑也有漏洞,因为有可能存在三个普通假期连在一起,比两个最长的长的情况。
思考所有的情况是很难做到的,总会在想不到的地方有一些漏洞……
也就是说,我需要尽量用抽象的思维来思考这个问题。虽然现在还是懵逼状态,但我相信明天一定能得到正确答案。