• 马拉松接力赛(思维题)


    描述
    某城市冬季举办环城25km马拉松接力赛,每个代表队有5人参加比赛,比赛要求每个的每名参赛选手只能跑一次,一次至少跑1km、最多只能跑10km,而且每个选手所跑的公里数必须为整数,即接力的地方在整公里处。 刘老师作为学校代表队的教练,精心选择了5名长跑能手,进行了训练和测试,得到了这5名选手尽力连续跑1km、2km、…、10km的所用时间。现在他要进行一个合理的安排,让每个选手跑合适的公里数,使学校代表队跑完25km所用的时间最短。根据队员的情况,这个最短的时间是惟一的,但安排方案可能并不惟一。 根据测试情况及一般运动员的情况得知,连续跑1km要比连续跑2km速度快,连续跑2km又要比连续跑3km速度快……也就是说连续跑的路程越长,速度越慢,当然也有特殊的,就是速度不会变慢,但是绝不可能变快。
    输入
    5行数据,分别是1到5号队员的测试数据,每行的10个整数,表示某一个运动员尽力连续跑1km、2km、…、10km所用的时间。
    输出
    两行,第一行是最短的时间,第二行是五个数据,分别是1到5号队员各自连续跑的公里数。
    样例输入
    333 700 1200 1710 2240 2613 3245 3956 4778 5899
    300 610 960 1370 1800 2712 3834 4834 5998 7682
    298 612 990 1560 2109 2896 3790 4747 5996 7654
    289 577 890 1381 1976 2734 3876 5678 6890 9876
    312 633 995 1467 1845 2634 3636 4812 5999 8123
    样例输出
    9748
    6 5 5 4 5

    其实这道题可以直接枚举的

    因为每个人只有10个状态

    所以总共只有10510^5种可能

    直接暴力验证就可以了

    当然最简单的做法有点意思

    我们处理出每两个数之间的差

    做出一个差分数组

    333 367 500 510 530 373 632 711 822 1121
    300 310 350 410 430 912 1122 1000 1164 1684
    298 314 378 570 549 787 894 957 1249 1658
    289 288 313 491 595 758 1142 1802 1212 2986
    312 321 362 472 378 789 1002 1176 1187 2124

    样例中的就是这样的

    那么发现每多跑1km就是在差分数组内往后多选一个

    那就可以贪心直接选了

  • 相关阅读:
    python基础4
    python的基础数据类型和编码
    python的if语句和while循环
    java特殊运算符
    深入理解java集合
    python常用模块
    python函数的参数问题
    集合关系之间的运算
    集合
    可变类型与不可变类型
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366408.html
Copyright © 2020-2023  润新知