当前位置:   article > 正文

打水问题(贪心算法)

打水问题(贪心算法)

题目:有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?通过键盘输入排队打水的人数以及每人打水的时间和水龙头数,使用贪心算法求出所有人完成打水总共花费的时间的最小值。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=100010;
  4. int t[N]; //打水时间
  5. int s[N]; //每个人等待的时间
  6. int res=0; //总花费时间
  7. signed main(){
  8. int n,r;
  9. cin>>n>>r;
  10. for(int i=1;i<=n;i++)
  11. cin>>t[i];
  12. sort(t+1,t+1+n); //从大到小
  13. //前r个前缀和直接等于本身
  14. for(int i=1;i<=r;i++) s[i]=t[i];
  15. //纵向前缀和 ,在前面人接水的过程中,后面的人需要等待
  16. for(int i=r+1;i<=n;i++) s[i]=s[i-r]+t[i];
  17. //求总和等待时间
  18. for(int i=1;i<=n-r;i++) res+=s[i];
  19. cout<<res<<endl;
  20. return 0;
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/504639
推荐阅读
相关标签
  

闽ICP备14008679号