又在洛谷上刷題。
又是一題,
來,咱讀題:
我們要求找出具有下列性質數的個數(包含輸入的自然數nn):
先輸入乙個自然數nn(n \le 1000n≤1000),然後對此自然數按照如下方法進行處理:
不作任何處理;
在它的左邊加上乙個自然數,但該自然數不能超過原數的一半;
加上數後,繼續按此規則進行處理,直到不能再加自然數為止.
11個自然數nn(n \le 1000n≤1000)
11個整數,表示具有該性質數的個數。
輸入 #1複製
6輸出 #1複製
6滿足條件的數為
6,16,26,126,36,136
看完題,「這題不很簡單嗎?乙個遞迴不就解決?」
滿懷信心地寫程式:
1 #include2一下f5都沒有按(我用的visual studio 2019),就滿懷信心的提交。using
namespace
std;
3int s=0;4
int js(inta)5
12return
s;13}14
intmain()
15
結局並不是我想象的那樣,而是這樣:
(開始懷疑)
自己試了一下,果然:
這好歹也是個i7-6700k……
怎麼也不知道應該怎樣改進,只好檢視了一下題解,發現題解使用的是遞推演算法。
我們以4為例子來進行說明
4後面可以跟上1,2組成14,24
14後面跟不了,24可以跟上1組成124
再加上4本身就可以得到4的種類
即 14,24,124,4
而我們只要算出1,2的種類就可以加起來得到4的種類
**因此,我們得到
1 f[1]=1......** 以此類推,我們得到以下**2 f[2]=2=f[1]+1
3 f[3]=2=f[1]+1
4 f[4]=4=f[1]+f[2]+1
5 f[5]=4=f[1]+f[2]+1
1 #include2我就發現了自己演算法的問題:using
namespace
std;
3int fuc[1000];4
intmain()
514 fuc[i]++;//
還要加上這個數本身 15}
16 cout<
17return0;
18 }
遞推演算法每算好乙個數,下乙個數就只需要加起來就行了;而遞迴演算法每個數都要重新計算,自然效率低。
遞推與遞迴
遞推與遞迴 遞推像是多公尺諾骨牌,遞迴是大事化小。遞推的效率更高 遞推 斐波那契數列 例 母親為兒子的四年大學學費準備了一筆存款,兒子每月月底取下月生活費1000元。銀行年利率為 1.71 畢業時連本帶息要取出 1000 元。則要存入多少錢。include define rate 0.0171 in...
遞推與遞迴
遞迴 將問題規模為n的問題,降解成若干個規模為n 1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模為n的問題的解。遞推 構造低階的規模 如規模為i,一般i 0 的問題,並求出解,推導出問題規模為i 1的問題以及解,依次推到規模為n的問題。遞迴包括回溯和遞推兩個過程...
遞迴與遞推
1 遞迴與遞推的定義 前者是 後者是對以前的問題進行計算,以得出當前問題的大結果。2 它們的典例和運用遞迴 遞推dfs,搜尋與回溯 動態規劃 用遞推能做的,記憶化搜尋定能夠實現 遞推僅能求方案數,求具體方案需用遞迴 3 各種關於遞推的例題 爬樓梯 數樓梯 兔子問題 includeusing name...