赞
踩
题目:有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?通过键盘输入排队打水的人数以及每人打水的时间和水龙头数,使用贪心算法求出所有人完成打水总共花费的时间的最小值。
- #include<bits/stdc++.h>
- using namespace std;
- const int N=100010;
- int t[N]; //打水时间
- int s[N]; //每个人等待的时间
-
- int res=0; //总花费时间
- signed main(){
-
- int n,r;
- cin>>n>>r;
- for(int i=1;i<=n;i++)
- cin>>t[i];
- sort(t+1,t+1+n); //从大到小
- //前r个前缀和直接等于本身
- for(int i=1;i<=r;i++) s[i]=t[i];
- //纵向前缀和 ,在前面人接水的过程中,后面的人需要等待
- for(int i=r+1;i<=n;i++) s[i]=s[i-r]+t[i];
-
- //求总和等待时间
- for(int i=1;i<=n-r;i++) res+=s[i];
- cout<<res<<endl;
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。