zoukankan      html  css  js  c++  java
  • 贪心1--排队打水问题

    贪心1--排队打水问题

    一、心得

     

    二、题目及分析

     

    题目意思:有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
    分析:看题目意思,要使每个人平均等待时间最小,当然是接水时间小的排在前面了,因此解法如下。

    1、读入n个人接水时间。

    2、对等待时间A数组进行排序,序号数组B同时进行排序。这里数据n为20000,因此,必须用快排才行,同时要注意的是,排序的时候要注意等待时间是一样的时候,序号前的要排在前面,所以要用到双关健排序。

    3、对每个接水时间T进行累加S即S:=s+a[i],就是下一个人的等待时间了。对每个等时间S进行累加ZS,ZS就总等待时间了。

    三、代码及结果

    代码中的n为100

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 int main(){
     6     int n,r;
     7     cin>>n>>r;
     8     int a[100];
     9     for(int i=1;i<=n;i++){
    10         cin>>a[i];
    11     }
    12     sort(a+1,a+n+1);
    13     
    14     //水龙头
    15     int tap[100];
    16     memset(tap,0,sizeof(tap));
    17     int j=1; 
    18     int sum=0;
    19     for(int i=1;i<=n;i++){
    20         if(j==r+1) j=1;
    21         tap[j]+=a[i];
    22         sum+=tap[j];
    23         j++;
    24     }
    25     cout<<sum<<endl;
    26     return 0;
    27 } 

  • 相关阅读:
    正则表达式30分钟入门教程
    oracle常用的字符和字符串处理类函数
    [转载]C#实现软件自动更新思路
    ORACLE函数介绍
    xml 文件操作类
    oracle 主键生成策略
    wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
    NSIS开始...
    Oracle分析函数详述
    常用正则表达式收集
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7130168.html
Copyright © 2011-2022 走看看