【问题描述】
有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
【输入格式】
第一行为n(n≤1000);
第二行n个整数,表示每人的接水时间Tl,T2,…,Tn(O≤Ti≤100)。
【输出格式】
输出最小的平均等待时间(输出结果精确到小数点后两位)。
【输入样例】
10
56 12 1 99 1000 234 33 55 99 812
【输出样例】
291.90
//Program P6_03
#include <iomanip>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int a[1005][2];
int ans,temp;
int main( void )
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i][0];
//标记当前输入的数的序号
a[i][1]=i;
}
//选择排序 从小到大 STL sort快速排序
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{
if(a[i][0]>a[j][0])
{
swap(a[i][0],a[j][0]);
swap(a[i][1],a[j][1]);
}
}
ans=0;
//等待时间最少的人,即第2个等待的时间
temp=a[1][0];
for(int i=2;i<=n;i++)
{
//第i人的等待时间
ans+=temp;
//前缀和 所有人的等待时间
temp+=a[i][0];
}
//写一个数组保存前辍和
printf("%.2lf\n",ans*1.0/n);
}
1319:【例6.1】排队接水
P1223 排队接水
【算法1-5】贪心
4.6算法之贪心(23题)
删数问题(NOIP1994)
P1106 删数问题
NOIP2010复赛 普及组 第2题 接水问题
NOIP1999年提高组第1题 导弹拦截
https://www.cnblogs.com/huashanqingzhu/p/6728652.html
NOIP2002 提高组第1题 均分纸牌
P1031 均分纸牌
NOIP2007普及组第2题_P1094 纪念品分组
NOIP2008普及组第2题_P1056 排座椅
NOIP2012年提高组 第2题 国王游戏(贪心、排序后列出)
NOIP2013年提高组 第2题 P1966 火柴排队(逆序对、贪心、排序)
NOIP2010普及组 第4题 P1199 三国游戏(贪心)