本题主要考察贪心算法和排序思想 思路为:用贪心算法找出本题的最优方案,用排序解决问题。 本题链接: 贪心:P1223 排队接水
#include<bits/stdc++.h> using namespace std; struct Node { double t;//接水时间 int id;//序号 }a[1001]; bool cmp(Node a ,Node b) { return a.t < b.t; } int n;//排队人数 int main() { cin >> n; double sum1 = 0, sum2 = 0; for (int i = 1; i <= n; i++) { a[i].id = i; cin >> a[i].t; } sort(a+1, a +1+ n,cmp);//记住要定义cmp for (int i = 1; i<= n; i++) { cout << a[i].id << " "; } cout << endl; for (int i = 1; i < n; i++) { sum1 = sum1 + a[i].t; sum2 = sum2 + sum1;//计算需要等待的总时间 } printf("%.2lf", sum2 / n); return 0; }核心代码:
for (int i = 1; i < n; i++) { sum1 = sum1 + a[i].t; sum2 = sum2 + sum1;//计算需要等待的总时间 }计算等待的总时间为本题难点,这里注意自己接水的时间是不计入等待时间的。