日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[dp]leetcode 1025. Divisor Game

發(fā)布時(shí)間:2023/12/10 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [dp]leetcode 1025. Divisor Game 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

輸入:一個(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ì)輸。

public boolean divisorGame(int N) {boolean[] target = new boolean[N+1];target[1] = false; if(N<=1) return false;target[2] = true;for(int x = 3;x<=N;x++){for(int y=1;y<=x/2;y++){if(x%y==0 && target[x-y]==false){target[x]=true;break;}}}return target[N];}

分析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è)成立。

public boolean divisorGame(int N) {return N%2==0;}

總結(jié)

以上是生活随笔為你收集整理的[dp]leetcode 1025. Divisor Game的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。