zoukankan      html  css  js  c++  java
  • 马拉松接力赛(贪心)题解(1252)

    备注:要多思考啊,尽量学以致用啊,贪心 一定要多想想是不是具备无后效性!!

    尽量开拓思路啊!!!

    题目描述

    某城市冬季举办环城25km马拉松接力赛,每个代表队有5人参加比赛,比赛要求每个的每名参赛选手只能跑一次,一次至少跑1km、最多只能跑10km,而且每个选手所跑的公里数必须为整数,即接力的地方在整公里处。

    刘老师作为学校代表队的教练,精心选择了5名长跑能手,进行了训练和测试,得到了这5名选手尽力连续跑1km、2km、…、10km的所用时间。现在他要进行一个合理的安排,让每个选手跑合适的公里数,使学校代表队跑完25km所用的时间最短。根据队员的情况,这个最短的时间是惟一的,但安排方案可能并不惟一。

    根据测试情况及一般运动员的情况得知,连续跑1km要比连续跑2km速度快,连续跑2km又要比连续跑3km速度快……也就是说连续跑的路程越长,速度越慢,当然也有特殊的,就是速度不会变慢,但是绝不可能变快。

    输入输出格式

    输入格式:

    5行数据,分别是1到5号队员的测试数据,每行的10个整数,表示某一个运动员尽力连续跑1km、2km、…、10km所用的时间。

    输出格式:

    两行,第一行是最短的时间,第二行是五个数据,分别是1到5号队员各自连续跑的公里数

    #include<cstdio>
    using namespace std;
    int a[6][11],b[6][11],c[6]={1,1,1,1,1,1},flag,ans,minx; //a数组是用来输入读取的 b数组是用来记录计算这五个人每千米的速度 c数组是用来记录每个人跑的路程(即千米数)
    int main() 
    {
     for(int i=1;i<=5;i++)
     {
      for(int j=1;j<=10;j++)
      {
       scanf("%d",&a[i][j]);//输入a
       b[i][j]=a[i][j]-a[i][j-1];//计算得b
      }
     }
     for(int i=1;i<=20;i++)
     {
            minx = 100000;
            for(int j = 1; j <= 5; j++)
                if(b[j][c[j]+1] < minx && c[j]+1 <= 10)
       {
                    flag = j;
                    minx = b[j][c[j]+1];
                }
            c[flag]++;//找到这个千米下速度最快的
        }
     for(int i = 1; i <= 5; i++) ans+=a[i][c[i]];
        printf("%d %d %d %d %d %d ",ans,c[1],c[2],c[3],c[4],c[5]);
        return 0;
    }

    比较 每一个千米 哪个人跑的快 跑的快的(还没有超出规定线的)跑

    最后累计 每个人跑多少就可以了

    至于 无效性嘛———每个人跑了多少米 不会影响到他后面的速度 因为 每个人的每个速度都是在输入的时候给好的 是固定不变 这里用到的贪心 也正好符合了无效性

  • 相关阅读:
    windows tensorflow gpu pip 安装
    记笔记本windows锁定cpu频率的问题
    关于arcgis闪退或停止运行的解决办法
    机器学习听课 | 线性回归 | 06
    剑指offer | 二叉树中和为某一值的路径 | 30
    剑指offer | 二叉搜索树的后序遍历序列 | 29
    剑指offer | 从上往下打印二叉树 | 28
    机器学习经典案例 | 目录 | 00
    剑指offer | 二叉树的镜像 | 27
    剑指offer | 树的子结构 | 26
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10140727.html
Copyright © 2011-2022 走看看