hdu 2013 蟠桃記 遞推 解題報告 C

2021-07-02 07:54:02 字數 2553 閱讀 9724

問題描述 :

喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知:悟空是在研究乙個數學問題!

什麼問題?他研究的問題是蟠桃一共有多少個!

不過,到最後,他還是沒能解決這個難題,呵呵^-^

當時的情況是這樣的:

第一天悟空吃掉桃子總數一半多乙個,第二天又將剩下的桃子吃掉一半多乙個,以後每天吃掉前一天剩下的一半多乙個,到第n天準備吃的時候只剩下乙個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢?

輸入:

輸入資料有多組,每組佔一行,包含乙個正整數n(1輸出:

輸入資料有多組,每組佔一行,包含乙個正整數n(1樣例輸入:

2

4

樣例輸出:

4

22

迭代的方法很簡單,直接按題目意思來就可以了。

for (s = n = 1; n < 30; n++)s = (s + 1) * 2;

計算機的鼻祖本來就是數學家,自然優化程式的最終方法還是要回歸到數學上。

本題很容易得到它的遞推方程:

f(1) = 1;f(n) = [f(n-1) + 1] × 2;
於是我們得到:

f(n) + 2 = 2 × [f(n-1) + 2]

f(1) + 2 = 3

=>

f(n) + 2 = 3 × 2n-1

=>

f(n) = 3 × 2n-1 - 2

對於這種推斷題還有另外一種遞推方法,雖然對於本題來說很麻煩。但有時候它是無可替代的。

f(1) = 1;

f(n) = 2f(n-1) + 2 = f(n-1) + 2f(n-2) + 4;

=>

f(n) + f(n-1) + 4 = 2 × [f(n-1) + f(n+2) + 4];

設 g(n) = f(n) + f(n-1) + 4;

則 g(n) = 2 × g(n-1);

g(2) = f(2) + f(1) + 4 = 9;

∴g(n) = 9 × 2n-2 (n > 1)

∴f(n) + f(n-1) = 9 × 2n-2 - 4 ①

f(n-1) + f(n-2) = 9 × 2n-3 - 4 ②

┋ f(3) + f(2) = 9 × 2 - 4

f(2) + f(1) = 9 - 4

把①式減去②式得

f(n) = 9 × 2n-3 + f(n-2)

f(n-2) = 9 × 2n-5 + f(n-4)

這時候,我們需要分類討論了:

n為奇數

f(n)   = 9 × 2n-3 + f(n-2)

f(n-2) = 9 × 2n-5 + f(n-4)

┋ f(5) = 9 × 22 + f(3)

f(3) = 9 + f(1)

f(1) = 1

從下往上迭代,得:

f(n) = 9 × (2n-3 + 2n-5 + ... + 22 + 1) + 1

=>

f(n) = 9 × (1 - 4(n-1)/2) ÷ (1 - 4) + 1

=>

f(n) = 3 × 2n - 1 - 2

n為偶數

f(n)   = 9 × 2n-3 + f(n-2)

f(n-2) = 9 × 2n-5 + f(n-4)

┋ f(4) = 9 × 21 + f(2)

f(2) = 4

從下往上迭代,得:

f(n) = 9 × (2n-3 + 2n-5 + ... + 21) + 4

=>

f(n) = 9 × 2 × (1 - 4(n-2)/2) ÷ (1 - 4) + 4

=>

f(n) = 3 × 2n - 1 - 2

世上的事往往如此,巧合的事情經常發生。不得不感嘆大自然的美妙~

現在我們就得到了這道題目的公式了: f(n) = 3 × 2n – 1 – 2

01#include

02#include

03

04intmain(void)

05

遞推遞迴 I 蟠桃記

題目 description 孫悟空在大鬧蟠桃園的時候,第一天吃掉了所有桃子總數一半多乙個,第二天又將剩下的桃子吃掉一半多乙個,以後每天吃掉前一天剩下的一半多乙個,到第n天準備吃的時候只剩下乙個桃子。這下可把神仙們心疼壞了,請幫忙計算一下,第一天開始吃的時候一共有多少個桃子?input 輸入資料有多...

杭電 2013 蟠桃記

problem description 喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知 悟空是在研究乙個數學問題!什麼問題?他研究的問題是蟠桃一共有多少個!不過,到最後,他還是沒能解決這個難題,呵呵 當時的情況是這樣的 第一天悟空吃掉桃子總數一半多乙個...

蟠桃記(杭電2013)

蟠桃記 problem description 喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知 悟空是在研究乙個數學問題!什麼問題?他研究的問題是蟠桃一共有多少個!不過,到最後,他還是沒能解決這個難題,呵呵 當時的情況是這樣的 第一天悟空吃掉桃子總數一...