分石子的問題(n個石子放入m個筐子,兩堆石子遊戲,一堆石子遊戲)

來源:互聯網
上載者:User

將三類分石子的問題整理到一起

問題一:

有n個石頭,k個框子。把n個石頭按順序放入k個框子,比如1~3放入1,4~6放入2,要求最大重量的框子的重量最小的放法。

設石子的重量分別為Q1,Q2,...

g(i,j)=Qi+,...,+Qj;

f(i,j)表示把i個石子放到j個框的最大重量框的重量。

則f(i,j)=minj-1<=p<i

(f(i,j),max(f(p,j-1),g(p+1,i)));

g(i,i)=Qi

,f(1,1)=g(1,1),f(i,1)=g(1,i);

1<=i<=n;

1<=j<=k;

如果提前把Si

=Q1+,..,+Qi 計算出來,g(j,k)=Sk

-Sj-1

則時間複雜度為O(N2

)

 

         對於這個問題,提出一種nlog(n)的演算法,用二分探測的方法石頭的重量範圍在1~N的範圍內。初始值可以設定為所有石塊重量之和的平均值,然後檢查該值是否合理,如果合理,則減小該值,否則增大,按照二分法處理。總會找到一個值,恰好可以,小於他的都不行。

方法二要明顯優於方法一

 

問題二:遊戲:有兩堆石子,兩個人來取石子。取石子的方式為:可以從一堆中取任意多個石子,或者,從兩堆中取一樣多的石子

               想想一下取石子的方法。

               如果一堆為兩個石子,一堆為1個石子,那麼先取的人肯定是要輸的

               如果兩堆石子數量相等,或者一堆數量為0,則先取的一定會贏。

 

              若當前一堆的數量為n,另一堆的數量為n+1,則先取的一定會輸。例如先取的人在某一堆中取剩k個,k不等於0,否則,另一人立刻z在另一堆中取剩k,或者k-1個,始終保持一堆為m,一堆為m+1的狀態,m不為0,則後取的一定會贏

 

問題三:非取石子問題,在面試中遇到的一個問題。其實是很簡單的題目,以前沒有遇到過

                遊戲:假如有N個石子,每次最多可以取k個,兩個人取石子,問先取的贏,還是後取的贏

 

               這個問題比較簡單,以前從來沒有思考過。直接給答案:步長+1的整數倍的後拿的肯定贏,否則先拿,拿餘數就可以了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.