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



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

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAX 100050
long long sum_len_left[MAX];
long long sum_len_right[MAX];
int sum_apple_left[MAX],sum_apple_right[MAX]; long long ans;
int Left,Right;
int n,k,l,T,x_len,a_apple; void solve()
{
for(int i=1; i<=Left; i++)
{
if(i<=k)
sum_len_left[i]=sum_apple_left[i];
else
sum_len_left[i]=sum_len_left[i-k]+sum_apple_left[i];
}
for(int i=1; i<=Right; i++)
{
if(i<=k)
sum_len_right[i]=sum_apple_right[i];
else
sum_len_right[i]=sum_len_right[i-k]+sum_apple_right[i];
}
ans=(sum_len_left[Left]+sum_len_right[Right])*2;
} int main()
{
scanf("%d",&T);
while(T--)
{
memset(sum_len_left,0,sizeof(sum_len_left));
memset(sum_len_right,0,sizeof(sum_len_right)); scanf("%d%d%d",&l,&n,&k);
Left=0,Right=0;
for(int i=0; i<n; i++)
{
scanf("%d%d",&x_len,&a_apple);
for(int j=0; j<a_apple; j++)
{
if(x_len*2<l)
sum_apple_left[++Left]=x_len;
else
sum_apple_right[++Right]=l-x_len;
}
} sort(sum_apple_left+1,sum_apple_left+Left+1);
sort(sum_apple_right+1,sum_apple_right+Right+1);
solve(); for(int i=0; i<=k; i++)
{
long long lll = (sum_len_left[Left-i]+sum_len_right[max(0,Right-(k-i))])*2;
ans=min(ans,l+lll);
}
printf("%lld\n",ans);
}
return 0;
}

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. PHPStorm自动提示方法

    第一种: /** * 一定要写@return static * @return static */ public static function getInstance() { $className ...

  2. getClassInstances --通过类的实例来得到数据

    好东西,空了来研究 实例代码如下: for b in getClassInstances bitmaptex doformat "Name : %, Texture name : %, Af ...

  3. Ubuntu系统使用技巧

    ======================vbox 显示模式=====================right_ctrl+c     自动缩放right_ctrl_home  显示菜单====== ...

  4. hibernate 一张数据表的流程

    1. 写一个domain类来映射数据库表 2. 写一个*.hbm.xml文件来配置映射 <?xml version="1.0"?> <!DOCTYPE hiber ...

  5. DELL 720XD和R820玩赏

  6. Linux&shell 之基本Shell命令

    写在前面:案例.常用.归类.解释说明.(By Jim) 文件和目录列表lsls -F (用斜杠区分目录和文件)ls -a (把隐藏文件一并显示出来)ls -l (同ll,显示详细信息)ls -l 文件 ...

  7. bzoj2730

    首先不难想到要先求割顶,求割顶的方法白书上有讲解由于是一个矿崩塌,所以假如一个连通块连接了两个以上割顶,那么这个连通块内显然是不用设出口的连接块只连接了一个割顶,那么出口可以设在这个连通块内任意位置由 ...

  8. [转]stringstream的用法

    使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中, ...

  9. Ring - HDU 2296(自动机+dp)

    题目大意:斯蒂文想送给他女盆友一个戒指,并且他想在戒指上刻一些字,他非常了解他女盆友喜欢什么单词,比如"love""forvevr"....并且他还把女盆友喜欢 ...

  10. sql给整数补零

     update hs_user.clientorder a set a.stockcode = lpad(a.stockcode,6,'0')   where a.market = 'SZ'