1 条题解
-
0
练67.2 金猪大家庭
解题思路
用数组记录当前1~6岁母猪数量。每年先让上一年母猪长一岁,超过6岁移除;2岁母猪每只生2雌2雄,3~6岁每只生4雌4雄。新雌猪加入1岁,雄猪只保留当年新生的。
正确性说明
依题目给出的对应关系逐项处理,位置与原输入保持明确对应。每一步完成当前项的全部贡献,结束后得到所有位置或字符的目标结果。
易错点
雄猪第二年离家,不进入后续年龄数组;母猪6岁仍可繁殖,当年结束后下一年消失。
复杂度
时间O(n),空间O(1)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<unsigned long long> f(7); f[1] = 1; unsigned long long boys = 0; for (int year = 2; year <= n; year++) { vector<unsigned long long> g(7); for (int age = 2; age <= 6; age++) g[age] = f[age - 1]; unsigned long long birth = 2 * g[2]; for (int age = 3; age <= 6; age++) birth += 4 * g[age]; g[1] = birth; boys = birth; f.swap(g); } unsigned long long ans = boys; for (int age = 1; age <= 6; age++) ans += f[age]; cout << ans << "\n"; return 0; }
- 1