题解
2026-02-05 21:59:17
发布于:浙江
43阅读
0回复
0点赞
题目解析
- 输入输出:输入五个整数 ,分别表示公鸡单价(元)、母鸡单价(元)、小鸡 只售价(元)、总预算(元)、需要购买的总鸡数;输出满足条件的购买方案总数 。
- 数据范围:,。数据规模较小,允许使用枚举策略。
- 复杂度要求:时间复杂度 ,最坏情况下约 次运算,远低于 限制;空间复杂度 。
- 算法知识点:
枚举(暴力求解)、不定方程整数解
思路解析
这是一个典型的不定方程整数解计数问题。设购买公鸡、母鸡、小鸡的数量分别为 ,可列出方程组:
直接三重枚举 会达到 的复杂度,在 时不可接受。但注意到 可由前两式推导得出,且利用花费作为枚举维度可将范围压缩至 :
-
重新定义枚举变量:设购买公鸡花费 元,母鸡花费 元,则小鸡花费为 元。
- 公鸡数量:
- 母鸡数量:
- 小鸡数量:(因为每元可买 只)
-
确定枚举边界:
- 的范围:,步长为 (确保 为整数,避免无效状态)
- 的范围:,步长为 (剩余钱必须非负)
-
验证可行性:计算总鸡数 ,若 则方案数 。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int x, y, z, n, m;
cin >> x >> y >> z >> n >> m;
int ans = 0;
// i: 买公鸡花的钱(步长x确保数量为整数)
for (int i = 0; i <= n; i += x) {
// j: 买母鸡花的钱,上限为剩余钱n-i(步长y确保数量为整数)
for (int j = 0; i + j <= n; j += y) {
int money_chick = n - i - j; // 买小鸡的钱
int cnt_chick = z * money_chick; // 小鸡数量:每元z只
int total = i / x + j / y + cnt_chick; // 总鸡数
if (total == m)
ans++;
}
}
cout << ans << endl;
return 0;
}
这里空空如也

有帮助,赞一个