题目链接:

HDU5303

题意:

有一条环形的长为L的路,仓库在位置0处,

这条路上有n棵苹果树,给出每棵苹果树的位置和苹果数量,

问用 一次最多能装K个苹果的篮子   把这条路上全部苹果採回仓库最少须要走的距离

解题思路:

这条路是环形的,先把果树分为两部分,圆的左半边算一部分,圆的右半边算还有一部分

对全部苹果依据距离排序 , 用类似背包的思想,  统计左半边,右半边用 来回走(来回的长度一定小于一个圆环的周长)的方式採集完苹果所须要走的最少距离;

最后 考虑须要走一圈的情况:左边 多出k1( <K)个苹果,右边多出k2 (<k) 个苹果.

推断   来回拿k1所需走的距离+来回拿k2所需走的距离  和 圆周长L 的 大小关系就可以得出对应答案

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define maxn 100050
using namespace std;
int dis[maxn],cnt;
int ldis[maxn],rdis[maxn];
int cnt1,cnt2;
LL lsum[maxn],rsum[maxn]; int cmp(int a,int b)
{
return a<b;
}
int main()
{
// freopen("in.txt","r",stdin);
int T,m,n,k,a,b,L;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&L,&m,&k);
cnt=cnt1=cnt2=0;
while(m--)
{
scanf("%d%d",&a,&b);
if(a==0)
continue;
if((a<<1)<=L)
for(int i=1;i<=b;i++)
ldis[++cnt1]=a;
else
for(int i=1;i<=b;i++)
rdis[++cnt2]=L-a;
}
sort(ldis+1,ldis+cnt1+1,cmp);
sort(rdis+1,rdis+cnt2+1,cmp);
cnt=cnt1+cnt2; for(int i=1;i<=cnt1;i++) //左半边 通过来回的方式拿完
if(i<=k) lsum[i]=ldis[i];
else lsum[i]=ldis[i]+lsum[i-k]; for(int i=1;i<=cnt2;i++) //右半边.......
if(i<=k) rsum[i]=rdis[i];
else rsum[i]=rdis[i]+rsum[i-k]; LL ans=(lsum[cnt1]+rsum[cnt2])<<1; k=min(k,cnt);
int l_,r_;
for(int i=1;i<=cnt1&&i<=k;i++) //枚举走一圈时,左半边拿的苹果数量
{
l_=cnt1-i,r_=max(0,cnt2-k+i);
ans=min(ans,L+((lsum[l_]+rsum[r_])<<1));
}
printf("%I64d\n",ans);
}
return 0;
}

Hdu5303 Delicious Apples 贪心的更多相关文章

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

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

  2. 解题报告 之 HDU5303 Delicious Apples

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

  3. HDU 5303 Delicious Apples (贪心 枚举 好题)

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

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

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

  5. Delicious Apples (hdu 5303 贪心+枚举)

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

  6. HDU 5303 Delicious Apples (2015多校第二场 贪心 + 枚举)

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

  7. dp - 2015 Multi-University Training Contest 2 1004 Delicious Apples

    Delicious Apples Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5303 Mean: 一条长为L的环形路上种着n棵 ...

  8. 2015 Multi-University Training Contest 2 hdu 5303 Delicious Apples

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

  9. HDU 5303 Delicious Apples(思维题)

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

随机推荐

  1. Android学习笔记(五)Android框架

    一.技术结构图 注:开发者最需要关注的是第三层“Application Framework” 二.基于组件的应用程序开发 1)Activity 一个Activity就是一个界面,负责和用户交互. 2) ...

  2. solr深分页,游标操作分页,解决性能问题

    solr深分页,游标操作分页,解决性能问题 @Test public void pageByCursor() { try { solrServer.connect(); String query = ...

  3. C# 调用带有输出参数的分页存储过程

    一.创建带有输出参数的分页存储过程 use StudentMISDB go select * from Course alter table Course go --update Course set ...

  4. [转]汇编语言:MOVSB,MOVSW,MOVSD

    汇编语言:MOVSB,MOVSW,MOVSD 转自: http://blog.csdn.net/zhenyongyuan123/article/details/8364011   目前80386系列的 ...

  5. POSIX多线程—概述

    作者:阿波链接:http://blog.csdn.net/livelylittlefish/article/details/7918110 (整半年没有更新,发几篇以前的读书笔记.) Content ...

  6. 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理

    1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...

  7. JavaScipt30(第四个案例)(主要知识点:数组原型链上的一些方法)

    承接上文,下面是第四个案例 附上项目链接: https://github.com/wesbos/JavaScript30 const inventors = [ { first: 'Albert', ...

  8. 数据库——DBUtils和连接池

    第一章 DBUtils如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简 ...

  9. 关于Extjs的窗口拖拽,改变大小,背景淡化问题

    大部分Extjs的Windows问题:在Extjs4代码中,只要加几句话: frame:true, //这个窗口的边边是圆的 border : false , //窗口没有边框 draggable: ...

  10. Python学习-字符串函数操作3

    字符串函数操作 isprintable():判断一个字符串中所有字符是否都是可打印字符的. 与isspace()函数很相似 如果字符串中的所有字符都是可打印的字符或字符串为空返回 True,否则返回 ...