【贪心算法】排队打水

简介: 【贪心算法】排队打水

系列文章目录

 

第一篇 【贪心算法】初步介绍

第二篇  【贪心算法】删数问题

第三篇  【贪心算法】排队打水 (此篇)


一、题目

1141. 【贪心算法】排队打水 (Standard IO)

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

题目描述:

有n(n<=1000)个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

输入:

输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。

输出:

输出文件有两行,第一行为一种排队顺序,即1到n的一种排列(如果有多种方案,请输出字典序最小的方案);第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

样例输入:

10

56 12 1 99 1000 234 33 55 99 812

样例输出

3 2 7 8 1 4 9 6 10 5

532.00

二、思路

这是一道经典的贪心算法问题。题目意思是给你一个数列,在经过一定顺序的排列后,求出结果为a[1]*n+a[2]*(n-1)+a[3]*(n-2)+...+a[n]的s,并使其最小。

因此,只需要对a[i]进行从小到大的排序,再暴力求出结果就行了。但是,我们要先输出其原先的顺序,因此我就用二维数组记录--a[i][1]表示装水时间,a[i][2]代表原来i是第几个。

而排序具体如下:

for(int i=1;i<m;i++)
{
    for(int j=i+1;j<=m;j++)
    {
        if(a[i][1]>a[j][1])
        {
            swap(a[i],a[j]);
        }
    }
}

image.gif

如程序,我的整体排序方式是选择排序。当符合交换条件(后者时间比前者短),就swap()。这个swap函数很厉害,可以把整个a[i]与a[j]交换;而且只需要iostream的头文件,也十分方便,值得计入笔记本当中!!!

最后,在输出a[i][2]的同时,进行计算。接着——

静待AC!

image.gif编辑

实际上,上述排序方式只是适应于初学者中的初学者,我们还可以用快排、归并排序、插入排序、桶排等等等等。当然,对于时间很短,数据不大的题目(例如此题),用上述的冒泡排序即可。

不过,用sort()函数也不错。(关于sort函数,详见我的另一篇文章sort()函数详解)。

三、AC源程序

#include<bits/stdc++.h>
using namespace std;
int m,a[1005][3];
double s;
int main()
{
  cin>>m;
  for(int i=1;i<=m;i++)
  {
    cin>>a[i][1];
    a[i][2]=i;
  }
  for(int i=1;i<=m-1;i++)
  {
    for(int j=i+1;j<=m;j++)
    {
      if(a[i][1]>a[j][1])
      {
        swap(a[i],a[j]);
      }
    }
  }
  for(int i=1;i<=m;i++)
  {
    cout<<a[i][2]<<" ";
    s=s+a[i][1]*(m-i+1);
  }
  printf("\n%.2f",s/(m*1.0));
}

image.gif


总结

以上就是今天要讲的内容,请各位点个赞再走!!!

相关文章
|
27天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
5月前
|
人工智能 算法
第一周算法设计与分析 G : 排队援救
这篇文章介绍了解决算法问题"排队援救"的方法,通过使用队列和映射来模拟救援点的排队过程,并确定最终得到救援的人的顺序和编号。
|
算法 调度
调度算法 | 先来先服务(超市排队结账模型)
在操作系统中,如何去衡量性能?我们先简化模型,只用一个性能指标去衡量——周转时间,周转时间的定义是任务完成时间减去任务到达系统的时间
190 0
|
机器学习/深度学习 存储 算法
排队打水算法实现
排队打水算法实现
|
9天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
22天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
157 80
|
10天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
10天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
8天前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。