1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int main() { vector<int> arr; // 存储每种果子的数量 int n; cin >> n; // [1] 输入果子的种类数n // [2] 输入每种果子的数量并加入数组 for(int i = 0; i < n; i++){ long long a; cin >> a; arr.push_back(a); } sort(arr.begin(), arr.end()); // [3] 对果子数量数组升序排序,便于每次取最小两堆 long long sum = 0; // 存储最小总体力消耗 // [4] 进行n-1次合并操作,最终合并成1堆 for(int i = 0; i < n-1; i++){ long long x = arr[i] + arr[i+1]; // 取出当前最小的两堆果子,计算合并后的数量 sum += x; // 累加本次合并的体力消耗 int j = i + 2; // 从下一个位置开始,寻找合并后新堆的插入位置 // [5] 将新堆x插入到数组中,保持数组升序 while(x > arr[j] && j < n){ arr[j-1] = arr[j]; // 当前位置元素后移,为x腾出位置 j++; } arr[j-1] = x; // 将x插入到合适位置 } cout << sum; // [6] 输出最小体力消耗值 return 0; }
- 1
信息
- ID
- 1042
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 6
- 已通过
- 1
- 上传者