这是一道简单的贪心题:
排队接水问题
Description
有n个人在一个水龙头前排队接水,假如每个人接水的时间为T i ,请编程找出这n个人排队的一种顺序,使得n个人的平均打水时间最小。
Input Format
输入文件共两行,第一行为n (n<=1000);
第二行分别表示第 1 个人到第n个人每人的接水时间T 1 ,T 2 ,…,T n ,每个数据之间有 1 个空格。
Output Format
输出文件有第一行,为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
解答
根据生活常识,我们知道,排队接水,应该时间少的人先。
所以我们可以使用
sort(a,a+n)
那么
#include<bits/stdc++.h>
using namespace std;
int n,a[1010],ans;
int main() {
cin>>n;
for(int i=0;i<n;i++) scanf("%d",a+i);
sort(a,a+n);
for(int i=0;i<n;i++) {
for(int j=i;j>=0;j--) {
ans+=a[j];
}
}
printf("%.2f\n",(ans*1.0/n));
return 0;
}