1. 母牛生產
母牛從3-7歲初每年會生產1頭小母牛,10歲后死亡(10歲仍然存活),假設初始有1頭剛出生的母牛,請問第n年有多少頭母牛?(年從第一年開始計數)
思路:
注: 在沒有任何思路的情況下,可以先暴力分析,順着題意將給出的示例推導出來,然后再從中觀察規律,找到更為便捷的方法;
1. 先暴力分析:從第一年開始,計算每年的母牛個數;
基本思路:以最開始的母牛為基准進行分析,分析每年它生產的孩子的個數,最后加1 就是每年牛的個數;
觀察上述分析結果,我們會發現:有很多重復地方,即母牛這題含有重復子結構,最常用的方法就是:用數組變量,將重復的地方記錄下來。
(1)sum:記錄每次的求和部分
(2)opt[ i ]:記錄第 i 年母牛的個數, opt[ -1] :表示最終的輸出結果
(3)一次循環遍歷,記錄 sum 和 opt[ i ],時間復雜度:O(n)
Python代碼:
1 # 母牛生產 2 import sys 3 for line in sys.stdin: 4 n = int(line) 5 if n < 3: 6 print('1') 7 else: 8 opt = [0 for i in range(n + 1)] 9 opt[0] = -1 10 opt[1] = 1 11 opt[2] = 1 12 13 sum = 0 14 for i in range(3, n+1): 15 if i >= 3 and i <=7: 16 sum = sum + opt[i - 2] 17 opt[i] = sum + 1 18 19 elif i >= 8 and i <= 10: 20 sum = sum - opt[i-7] + opt[i-2] 21 opt[i] = sum + 1 22 23 else: 24 sum = sum - opt[i-7] + opt[i-2] 25 opt[i] = sum 26 27 print(opt[-1])