3 条题解
-
0
这道题要用什么算法其实是写在标签里了,这个算法就叫贪心算法。贪心算法主要就是在每一步都找这一步最快的方法,也就是说,假如要先让一个人打水,得让打水最快的来,就能最快地走完这一步,然后第一个人就不用管了,后面的也是重复这个步骤。
不过,题目有个要读懂的点,总时间是什么意思?比如说,假设有3个人到一个水龙头打水,他们打水的时间分别是1, 2, 3(单位: min), 对于第一个打水的人来说要1(min),第二个打水的人来说要1 + 2 = 3(min),对于第三个打水的人来说要1 + 2 + 3 = 3 + 3 = 6(min)。总时间就是 1 + 3 + 6 = 10(min),当然,这也是最短的总打水时间。所以一个人需要的打水时间是 排队时间 + 自己的打水时间,总的打水时间就是 每个人需要的打水时间之和。
写成数学公式更容易看些:
下面是我的代码:
#include <stdio.h> #include <stdlib.h> int compare(const void *a, const void *b) { return (*(int *)a - *(int *)b); } int main() { int n, m; scanf("%d %d", &n, &m); int need_time[55] = {0}; for (int i = 0; i < n; i ++) { scanf("%d", &need_time[i]); } qsort(need_time, n, sizeof(int), compare); if (n > m) { for (int i = m; i < n; i ++) { need_time[i] += need_time[i - m]; } } int total_time = 0; for (int i = 0; i < n; i ++) { total_time += need_time[i]; } printf("%d", total_time); return 0; }
信息
- ID
- 18
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 1091
- 已通过
- 364
- 上传者