• P1252 马拉松接力赛 (洛谷)


    题目描述

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

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

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

    输入格式

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

    输出格式

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

    输入输出样例

    输入 #1

    333 700 1200 1710 2240 2770 3345 3956 4778 5899 
    300 610 960 1370 1800 2712 3734 4834 5998 7682
    298 612 990 1540 2109 2896 3790 4747 5996 7654
    289 577 890 1381 1976 2734 3876 5378 6890 9876
    312 633 995 1407 1845 2634 3636 4812 5999 8123

    输出 #1

    9905
    6 5 5 4 5

    思路:

            由于数据不是很多,10*10,所以很容易往贪心或者dp上面去想。由于dp还没想出来,就先考虑贪心的做法。

            首先,我们把每个人跑每个1km所要用的时间,由于每个人都是需要跑的,所以每个人起步距离1km。这个时候就要开始贪了,怎么贪?

            我们只需要让每个1km跑的最快的来跑这个1km即可

    或许你会问:每个人只能上场一次,如果按照刚刚的思路不就使得每个人上场多次了吗?

    其实这并不是问题,由于我们要找的是最短的时间,因此无论先跑还是后跑,最优方案的总时长不变,所以不会对结果造成影响。

    关于无后效性,由于每一步只受之前的状态影响,所以显然没有后效性。

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. //#include
    14. #include
    15. #include
    16. #include
    17. #include
    18. #define dbug cout<<"hear!"<
    19. #define rep(a,b,c) for(ll a=b;a<=c;a++)
    20. #define per(a,b,c) for(ll a=b;a>=c;a--)
    21. #define no cout<<"NO"<
    22. #define yes cout<<"YES"<
    23. #define endl "\n"
    24. #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    25. //priority_queue,greater >q;
    26. using namespace std;
    27. typedef long long ll;
    28. typedef long double ld;
    29. typedef pair PII;
    30. typedef pair<long double,long double> PDD;
    31. ll INF = 0x3f3f3f3f;
    32. //const ll LINF=LLONG_MAX;
    33. // int get_len(int x1,int y1,int x2,int y2)
    34. // {
    35. // return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1);
    36. // }
    37. const ll N = 1e6+ 10;
    38. const ll mod1 =998244353;
    39. const ll mod2 =1e9+7;
    40. const ll hash_num = 3e9+9;
    41. ll n,m,ca, k,ans;
    42. ll arr[N],brr[N],crr[N],drr[N];
    43. //ll h[N],ne[N],e[N],w[N],book[N],idx;
    44. //ll idx;
    45. // void add(ll a, ll b , ll c)
    46. // {
    47. // e[idx] = b, w[idx] = c,ne[idx] = h[a], h[a] =idx ++ ;
    48. // }
    49. int a[15][15];
    50. int b[15][15];
    51. int c[10];
    52. void solve()
    53. {
    54. rep(i,1,5)
    55. {
    56. c[i]=1;
    57. }
    58. rep(i,1,5)
    59. {
    60. rep(j,1,10)
    61. {
    62. cin >> a[i][j];
    63. b[i][j]=a[i][j]-a[i][j-1];
    64. }
    65. }
    66. rep(i,1,20)
    67. {
    68. ll minx=INF;
    69. ll f=0;
    70. rep(j,1,5)
    71. {
    72. if(b[j][c[j]+1]1<=10)
    73. {
    74. f=j;
    75. minx=b[j][c[j]+1];
    76. }
    77. }
    78. c[f]++;
    79. }
    80. ll ans=0;
    81. rep(i,1,5)
    82. {
    83. ans+=a[i][c[i]];
    84. }
    85. cout << ans << endl;
    86. rep(i,1,5)
    87. {
    88. cout << c[i]<<' ';
    89. }
    90. }
    91. int main()
    92. {
    93. IOS;
    94. ll _;
    95. _=1;
    96. //scanf("%lld",&_);
    97. //cin>>_;
    98. ca=1;
    99. while(_--)
    100. {
    101. solve();
    102. ca++;
    103. }
    104. return 0;
    105. }

     

  • 相关阅读:
    RHCE——二十一、Ansible模块
    免费可源可商用的BI工具对比(支持Doris 数据库)
    LeetCode994. 腐烂的橘子(C++中等题)
    【5G MAC】RA-RNTI的计算过程
    深入理解JVM虚拟机第四篇:一些常用的JVM虚拟机
    基于深度学习YOLOv8\YOLOv5的花卉识别鲜花识别检测分类系统设计
    【毕业设计】27-基于单片机的家庭监控及防盗报警_热释电报警_人体系统工程设计(原理图+源代码+仿真+实物照片+答辩论文)
    手机电池容量计算及相关理论知识
    2023年中国大学生留学现状及未来发展规划分析:直接就业仍是毕业后的主流选择[图]
    2051. The Category of Each Member in the Store
  • 原文地址:https://blog.csdn.net/qq_73261465/article/details/133522953