• 排队接水


    【题目描述】

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

    【输入】

    共两行,第一行为n(1n1000);第二行分别表示第11个人到第n个人每人的接水时间T1T2Tn每个数据之间有11个空格。

    【输出】

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

    【输入样例】

    10							
    56 12 1 99 1000 234 33 55 99 812

    【输出样例】

    3 2 7 8 1 4 9 6 10 5
    291.90


    做的第一个贪心题;
    作为一名新来的蒟蒻,
    本着虚心学习的态度
    我还是负责任地说,
    也就萌新适合看看我的题解了,
    (比我更萌新的蒟蒻)
    毕竟我写的还是比较简单易懂的
    (我写的主要是记录我的足迹,相当于我的成长档案)
    正所谓贪心,
    就是用局部最优解,
    得出全局最优解,
    举个例子,
    找规律,
    我们找一部分的规律,
    用这一部分,
    找全部数的规律,
    用局部最优解之和,
    求得最优解,
    就是贪心的主要思想,

    这个题因为数越靠前,
    计算的次数越多,
    我们就可以排好序,
    把最小的放在最前面,
    这里引用一个sort排序
    (需要<algorithm>库)
    sort(a+1,a+1+n)
    就是把a[1]~a[n]从小到大排好序,
    sort排序速度还是很快的,
    然后就好理解了;
     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int main()
     5 {
     6     int n,m[1100]={0};
     7     double t[1100]={0},a[1100]={0},s[1100]={0},ans=0;
     8     scanf("%d",&n);
     9     for(int i=1;i<=n;i++)
    10     {
    11         scanf("%lf",&t[i]);
    12         a[i]=t[i];
    13     }
    14     sort(t+1,t+n+1);
    15     for(int i=1;i<=n;i++)
    16         for(int j=1;j<=n;j++)
    17             if(t[i]==a[j]&&m[j]==0)
    18             {
    19                 printf("%d ",j);
    20                 m[j]=1;
    21                 break;
    22             }
    23     printf("
    ");
    24     for(int i=1;i<n;i++)
    25     {
    26         s[i]=t[i]+s[i-1];
    27         ans+=s[i];
    28     }
    29     printf("%0.2f",ans/n);
    30     return 0;
    31 }

    每日坚持打卡O(∩_∩)O~

    看不见我看不见我看不见我
  • 相关阅读:
    SurfaceView之绘制sin曲线
    双缓冲技术解决方案之二:内容不交叉时,可以增量绘制
    双缓冲技术解决方案之一:保存所有要绘制内容,全屏重绘
    双缓冲技术局部更新原理之派生自View
    双缓冲技术局部更新原理之派生自SurfaceView
    SurfaceView双缓冲技术引入
    SurfaceView动态背景效果实现
    SurfaceView概述和基本使用
    Bitmap添加水印效果
    Bitmap之compress图片压缩
  • 原文地址:https://www.cnblogs.com/sxy2004/p/11483742.html
Copyright © 2020-2023  润新知