题意:给定一个环形道路长度为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. 3ds max 2016 新功能

    3ds max 2016 新功能_MCG节点编辑器 这是介绍视频下载: http://pan.baidu.com/s/1gds4wqJ

  2. 概率质量函数:怀孕周期的PMF

    __author__ = 'dell' import surveyimport Pmfimport matplotlib.pyplot as pyplot table = survey.Pregnan ...

  3. BZOJ 3786 星系探索

    Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球 ...

  4. BZOJ 2423 最长公共子序列

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  5. Networking

    poj1287:http://poj.org/problem?id=1287 题意:平面上有许多点,又有许多边.每条边有一定的长度,且只会连接两个不同的点.现需要从这些边中选择某些边,使得尽可能多的点 ...

  6. 「Poetize8」Divisible

    描述 Description 设F[i]为斐波那契数列的第i项,F[1]=1,F[2]=1,F[i]=F[i-1]+F[i-2](i>=3). 输入格式 InputFormat 输入包含若干行( ...

  7. No row with the given identifier exists[ArtProject.Domains.Users#2]

      产生此问题的原因:              有两张表,table1和table2. 产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-on ...

  8. 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...

  9. Collections之sort、reverse

    在使用List集合时,通常情况下希望从集合中得到的对象是按照一定顺序排列的,但是List集合的默认排序方式为按照对象的插入顺序,可以通过java.util.Collections类的静态方法sort( ...

  10. 《Java 并发编程实战》读书笔记之二:图文讲述同步的另一个重要功能:内存可见性

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17288243 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另 ...