1 条题解
-
1
本题要点:
、 表示电梯停留在层的不满意度 比较 和 的差值,分解为三部分 第一部分:, 这部分是常数值 第二部分:用数组 存储,假设电梯停留在层 第三部分:用数组 存储, 假设电梯停留在层 $s3[p] = (a - p - 1) * sum{K[p + 1], K[p + 1], … , K[n]}$
、先计算 , 复杂度 ; 同理数组 复杂度也是 ; 先计算 电梯停留在一层的 , 利用递推公式可以计算每一层 的 不满意度, 记录最小值即可
标程
#include <iostream> #include <cstring> int main() { int T; std::cin >> T; while (T--) { int M, a, b, i; int k[10001]; long long down[10001], up[10001]; std::cin >> M >> a >> b; for (i = 1; i <= M; i++) { std::cin >> k[i]; } long long sum0 = k[1], sum1 = 0; down[1] = 0; for (i = 2; i <= M; i++) { // 求下楼不满意度 down[i] = down[i - 1] + b * sum0 + sum1; sum1 += sum0; // 这条语句和下面语句位置不能换 sum0 += k[i]; } sum0 = k[M]; sum1 = 0; up[M] = 0; for (i = M - 1; i >= 1; i--) { // 求上楼不满意度 up[i] = up[i + 1] + a * sum0 + sum1; sum1 += sum0; sum0 += k[i]; } long long min_d = down[1] + up[1]; int d = 1; for (i = 2; i <= M; i++) { if (down[i] + up[i] < min_d) { min_d = down[i] + up[i]; // 最小不满意度 d = i; // 楼层 } } std::cout << d << std::endl; } return 0; }
- 1
信息
- ID
- 702
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者