[dp]leetcode 1025. Divisor Game
輸入:一個(gè)正整數(shù)N
輸出:Alice贏(yíng),返回true,否則false
規(guī)則:黑板上給出一個(gè)數(shù)字N,ALice先選擇。Bob后選擇。他們可以選擇一個(gè)數(shù)字 X,0<X<N并且N%X=0。一個(gè)人選擇X以后,黑板上的數(shù)字變?yōu)镹-X。
當(dāng)一個(gè)人沒(méi)有可以選擇的數(shù)字的 時(shí)候,就輸了。假設(shè)Alice和 Bob水平相同,狀態(tài)相同。
分析:假設(shè)N=5。
Alice選擇1,黑板數(shù)字 變?yōu)?。
Bob選擇2或者1.
Bob選擇2,黑板 數(shù)字變?yōu)?。
Alice選擇1,黑板數(shù)字變?yōu)?。
Bob沒(méi)有可以選的,Alice贏(yíng)。
Bob選擇1,黑板數(shù)字變?yōu)?
Alice選擇1,黑板數(shù)字變?yōu)?#xff12;。
Bob選擇1,黑板數(shù)字變?yōu)?。
Alice沒(méi)有可以選的,Alice輸。
Bob有兩種選擇,會(huì)導(dǎo)致Alice可能贏(yíng),也可能輸。那結(jié)果應(yīng)該是什么呢?題目中有一個(gè)條件是:Alice和 Bob水平相同,狀態(tài)相同。他們應(yīng)該會(huì)分析怎么選擇才能讓自己贏(yíng)。我覺(jué)得這可能是題目的難點(diǎn)。我們使用歸納法總結(jié)一下。
從上面的分析看到,誰(shuí)遇到數(shù)字1,誰(shuí)會(huì)輸。誰(shuí)遇到數(shù)字2,誰(shuí)就會(huì)贏(yíng)。誰(shuí)遇到數(shù)字3,誰(shuí)會(huì)輸。
那遇到數(shù)字4,只要讓對(duì)方遇到數(shù)字3,自己就贏(yíng)了。
那遇到遇到數(shù)字5呢?要讓對(duì)方遇到數(shù)字3或者1,自己能贏(yíng),但是5%2不等于0,5%4不等于0,所以只能選擇1,對(duì)方遇到數(shù)字4,對(duì)方贏(yíng)。
我們需要一個(gè)dp,dp[i]=true表示Alice遇到數(shù)字i會(huì)贏(yíng),dp[i]=false表示Alice遇到數(shù)字i會(huì)輸。
分析2:使用數(shù)學(xué)歸納法。
N=1,輸
N=2,贏(yíng)
N=3,輸
N=4,贏(yíng)
假設(shè) N=奇數(shù),輸,N=偶數(shù),贏(yíng)。
那么當(dāng)N=n+1時(shí),如果n是偶數(shù),N一定是奇數(shù)。如果想要贏(yíng),我們一定要選一個(gè)偶數(shù),留給對(duì)方一個(gè)奇數(shù)。但是N是奇數(shù),N的約數(shù)只有1,我們只能選擇1,剩下一個(gè)偶數(shù)給對(duì)方。所以我們一定會(huì)輸。
如果n是奇數(shù),N一定是偶數(shù)。如果想要贏(yíng),我們一定要留給對(duì)方一個(gè)奇數(shù),那我們可以選擇一個(gè)奇數(shù),可以直接選擇1,留一個(gè)奇數(shù)給對(duì)方。我們一定會(huì)贏(yíng)。
假設(shè)成立。
總結(jié)
以上是生活随笔為你收集整理的[dp]leetcode 1025. Divisor Game的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 无用的设计模式之装饰者模式
- 下一篇: MOSSE论文笔记