JOJ 2200 Fracions

來源:互聯網
上載者:User

其他部落格裡的零散的幾篇。統一放在這裡吧。

題目:

A fracion a/b(a < b) can be expressed in the way 1/b1 + 1/b2 + ... + 1/bn. Now can you achieve it and make the sum of b1 to bn minimum?

Input and Output

For each case there are tow positive intergers a and b( 0 < a < b <= 100), output the minimum sum.

Sample Input

2 3

3 4

4 15

Sample Output

6

6

16

Hint: 2/3 = 1/3 + 1/3, 4/15 = 1/6 + 1/10

思路:

一開始想它可能有數學結論,但是沒找到,於是就想直接搜尋。對於給定的a和b,a*b是一個顯然的解。可以使用這個解來進行搜尋深度的控制。但是盲目搜尋試著搜尋了一下99/100,等了半天沒有結果。肯定會逾時。

發現因為a/b是真分數,有a/b<1,於是有a/b – 1/2 < 1/2,再進一步,a/b – 1/2 – 1/3 < 1/6,可行的分母已經從3到6了,a/b – 1/2 – 1/3 – 1/7 < 1/42,可行的分母一下子變成了42,它的下一個可行的分母的最小值是前兩個相鄰分母的乘積,增長得非常快。於是想可以利用這一點來進行最佳化。

另外一點,對於一個真分數a/b,例如3/100,那麼像1/2,1/3這些值一開始就不應該被考慮,因為它們一開始就比3/100大了。也就是說,一開始的分母k不可能任意小,否則1/k比目標還大,k有個最小值,即1/k有個最大值:1/k <= ceil(a/b)=>k>=ceil(a/b),另外,由此也可以算出來,假如當前分數為c/d,當前選擇了k作為擴充的分母,那麼選擇k以後下一個最小的可行分母的值就是ceil( (d*k) / (c*k-d)),假設在選擇k的時候已經得到的和是s,那麼假如s+k+ceil((d*k)/(c*k-d))不小於當前答案,就可以剪掉這棵子樹,可以多算這一步來減小遞迴壓棧的代價。

假設當前的分數為a/b,那麼搜尋時最大可行的分母應該不超過b,否則得到的解不會是最優解。

有了這些最佳化就可以AC了,但是排名很靠後。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.