题意:给定一个环形道路长度为L,以及环形道路下标为0处为起始点,在环形道路上距离起始点Xi位置种植一颗苹果树,该树有a个苹果,篮子的最大容量为K,那么求摘完全部苹果所需的最短距离。



思路:之前没想出来,根据官方题解,大致就是分成两个阶段来求,首先,按照普通情况下,肯定是每次都取离自己最短的苹果,这样因为要避免绕过半圈后的多余路径,就是分成两个半圈来走,分别贪心左右半圈,然后可能存在最后剩下的苹果数不足K,但如果走整圈的话一定优于分别半圈来回,为什么不足K呢,因为如果超过K的话,那么总可以算进左右半圈里面,所以这是最后的特殊情况,那么最后只要取这两个值中的最小值即可,在求整圈的时候,注意右边判断的时候可能为负值情况。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. #define MAX 100050
  7. long long sum_len_left[MAX];
  8. long long sum_len_right[MAX];
  9. int sum_apple_left[MAX],sum_apple_right[MAX];
  10.  
  11. long long ans;
  12. int Left,Right;
  13. int n,k,l,T,x_len,a_apple;
  14.  
  15. void solve()
  16. {
  17. for(int i=1; i<=Left; i++)
  18. {
  19. if(i<=k)
  20. sum_len_left[i]=sum_apple_left[i];
  21. else
  22. sum_len_left[i]=sum_len_left[i-k]+sum_apple_left[i];
  23. }
  24. for(int i=1; i<=Right; i++)
  25. {
  26. if(i<=k)
  27. sum_len_right[i]=sum_apple_right[i];
  28. else
  29. sum_len_right[i]=sum_len_right[i-k]+sum_apple_right[i];
  30. }
  31. ans=(sum_len_left[Left]+sum_len_right[Right])*2;
  32. }
  33.  
  34. int main()
  35. {
  36. scanf("%d",&T);
  37. while(T--)
  38. {
  39. memset(sum_len_left,0,sizeof(sum_len_left));
  40. memset(sum_len_right,0,sizeof(sum_len_right));
  41.  
  42. scanf("%d%d%d",&l,&n,&k);
  43. Left=0,Right=0;
  44. for(int i=0; i<n; i++)
  45. {
  46. scanf("%d%d",&x_len,&a_apple);
  47. for(int j=0; j<a_apple; j++)
  48. {
  49. if(x_len*2<l)
  50. sum_apple_left[++Left]=x_len;
  51. else
  52. sum_apple_right[++Right]=l-x_len;
  53. }
  54. }
  55.  
  56. sort(sum_apple_left+1,sum_apple_left+Left+1);
  57. sort(sum_apple_right+1,sum_apple_right+Right+1);
  58. solve();
  59.  
  60. for(int i=0; i<=k; i++)
  61. {
  62. long long lll = (sum_len_left[Left-i]+sum_len_right[max(0,Right-(k-i))])*2;
  63. ans=min(ans,l+lll);
  64. }
  65. printf("%lld\n",ans);
  66. }
  67. return 0;
  68. }

HDU5303的更多相关文章

  1. [2015hdu多校联赛补题]hdu5303 Delicious Apples

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 题意:在一个长为L的环形路径上种着一些苹果树,告诉你苹果树的位置(题目中以0~L指示坐标)及苹果 ...

  2. Hdu5303 Delicious Apples 贪心

    题目链接: HDU5303 题意: 有一条环形的长为L的路,仓库在位置0处, 这条路上有n棵苹果树,给出每棵苹果树的位置和苹果数量, 问用 一次最多能装K个苹果的篮子   把这条路上全部苹果採回仓库最 ...

  3. 解题报告 之 HDU5303 Delicious Apples

    解题报告 之 HDU5303 Delicious Apples Description There are n apple trees planted along a cyclic road, whi ...

  4. 2015 多校联赛 ——HDU5303(贪心)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  5. hdu5303(2015多校2)--Delicious Apples(贪心+枚举)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  6. hdu5303贪心

    http://acm.hdu.edu.cn/showproblem.php?pid=5303 说一下题目大意.. 有一个长为L的环..你家在原点位置0,那么剩下L-1个点上种有一些树, 给你树的位置和 ...

随机推荐

  1. 练习2 A - ASCII码排序

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 输入三 ...

  2. Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML

    在Asp.Net MVC项目中通过重写ActionFilterAttribute中的方法,我们就可以在轻松的在Action方法执行前后做一些特殊的操作如:[身份认证.日志记录.内容截取等]. 但是我们 ...

  3. linux主要目录的作用

    手动敲一遍.算是加强记忆吧~ /:文件系统的入口,也是最高一级的目录 /bin:最基本的且着急用户和普通用户都可以使用的命令放在此目录下,如:ls.cp等 /boot:存放Linux的内核及引导系统所 ...

  4. hdu 5135 Little Zu Chongzhi's Triangles

    http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有 ...

  5. 延长FLASH和EEPROM芯片写入次数的小方法

    开发电子产品时,常常需要断电后保存某些数据,这就需要使用 FLASH或EEPROM芯片,这两种芯片,可擦除的次数是有限制的,通常FLASH为10万次,EEPROM要多一点,为100万甚至1000万次. ...

  6. Dll方式的线程,需要引用这个

    {== D6DLLSynchronizer =================================================} {: This unit handles the D6 ...

  7. Context Switch Definition

    A context switch (also sometimes referred to as a process switch or a task switch) is the switching ...

  8. traits编程技法

    看了<stl源码剖析>中关于traits的部分,由于对模板还不是很熟悉,就看了一下还未完工的C++ Template 进阶指南 ,感觉收获很大,推荐一下. 在使用迭代器时,为了知道它的相应 ...

  9. [Locked] Inorder Successor in BST

    Inorder Successor in BST Given a binary search tree and a node in it, find the in-order successor of ...

  10. [Sequence Alignment Methods] Smith–Waterman algorithm

    Smith–Waterman algorithm 首先需要澄清一个事实,Smith–Waterman algorithm是求两个序列的最佳subsequence匹配,与之对应的算法但是求两个序列整体匹 ...