1. 母牛生产

母牛从3-7岁初每年会生产1头小母牛,10岁后死亡(10岁仍然存活),假设初始有1头刚出生的母牛,请问第n年有多少头母牛?(年从第一年开始计数)

头条笔试:母牛生产-LMLPHP

思路:

注: 在没有任何思路的情况下,可以先暴力分析,顺着题意将给出的示例推导出来,然后再从中观察规律,找到更为便捷的方法;

1. 先暴力分析:从第一年开始,计算每年的母牛个数;

基本思路:以最开始的母牛为基准进行分析,分析每年它生产的孩子的个数,最后加1 就是每年牛的个数;

头条笔试:母牛生产-LMLPHP

头条笔试:母牛生产-LMLPHP

观察上述分析结果,我们会发现:有很多重复地方,即母牛这题含有重复子结构,最常用的方法就是:用数组变量,将重复的地方记录下来。

(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])
04-27 20:09