1 条题解
-
0
解题思路
-
问题分析:
- 需要从个数中选择若干个数,使得它们的次方和最大。
- 直接选择所有正数即可(因为负数的次方可能减小总和)。
-
关键步骤:
- 遍历所有儿子,若其智力潜能的次方为正,则选中。
- 计算选中项的次方和。
-
数学公式:
- 最大和。
代码实现(C++98)
#include <cstdio> #include <cmath> using namespace std; int main() { int N, k, a[100]; scanf("%d%d", &N, &k); for (int i = 0; i < N; ++i) scanf("%d", &a[i]); int sum = 0; for (int i = 0; i < N; ++i) { int term = 1; for (int j = 0; j < k; ++j) term *= a[i]; // 计算a[i]的k次方 if (term > 0) sum += term; // 仅累加正值 } printf("%d\n", sum); return 0; }
代码解释
- 输入处理:读取儿子数量、幂指数及每个儿子的智力潜能。
- 计算和:
- 对每个儿子,计算其智力潜能的次方。
- 若结果为正值,则累加到总和中。
- 输出结果:打印最大和。
复杂度
- 时间复杂度:(每个儿子最多计算次乘法)。
- 空间复杂度:(存储智力潜能数组)。
-
- 1
信息
- ID
- 1210
- 时间
- 3000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 1
- 上传者