1 条题解
-
0
C++ :
#include <cstdio> #include <algorithm> using namespace std; /* 排队打水(单水龙头):要使所有人花费时间之和最小,按打水时间升序排队即可(短作业优先)。 排序后第 i 个人打完后,第 i+1..n 个人都要多等他 t_i 时间, 所以总时间 = Σ (n-i+1) * t_i = 各前缀和之和。 样例 4 / 4 2 3 1 -> 排序 1 2 3 4 -> 1+3+6+10 = 20。 */ static long long t[105]; int main(){ int n; if(scanf("%d", &n) != 1) return 0; for(int i = 1; i <= n; i++) scanf("%lld", &t[i]); sort(t + 1, t + 1 + n); long long sum = 0, pref = 0; for(int i = 1; i <= n; i++){ pref += t[i]; sum += pref; } printf("%lld\n", sum); return 0; }
- 1
信息
- ID
- 2845
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者