题目链接:

点击打开链接

题目大意:

在一个周长为L的环上。给出n棵苹果树。苹果树的位置是xi,苹果树是ai,苹果商店在0位置,人的篮子最大容量为k,问最少做多远的距离可以把苹果都运到店里

题目分析:

首先我们能够(ˇˍˇ) 想~,假设在走半圆之内能够装满,那么一定优于绕一圈回到起点。所以我们从中点将这个圈劈开。那么对于每一个区间由于苹果数非常少,所以能够利用belong[x]数组记录每一个苹果所在的苹果树位置,然后将苹果依照所在的位置排序,那么也就是我们知道每次拿k个苹果的代价是苹果所在的最远的位置。

所以我们记录。sum[i]就是拿第i个苹果的时候的最小代价和,利用背包的思想就是

sum[i] = sum[i-k] + d[i]

if ( i <= k )

sum[i] = d[i]

由于当最后苹果数不足k个时候。能够通过绕一圈拿走全部的苹果。所以说。最后要枚举左右这一圈拿走的苹果,然后算取最大的情况。详细看代码。有不懂的能够再评论中询问

代码例如以下:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#define MAX 100007 using namespace std; typedef long long LL;
int t,l,n,k;
LL sum1[MAX];
LL sum2[MAX];
LL belong[MAX];
vector<int> b1;
vector<int> b2; int main ( )
{
scanf ( "%d" , &t );
while ( t-- )
{
scanf ( "%d%d%d" , &l , &n , &k );
int m = 0;
int x,a;
b1.clear();
b2.clear();
for ( int i = 0; i < n ; i++ )
{
scanf ( "%d%d" , &x , &a );
for ( int i = 0 ; i < a ; i++ )
belong[++m] = x;
}
k = min ( k , m );
for ( int i = 1 ; i <= m ; i++ )
{
//cout << belong[i] << " ";
if ( belong[i]*2 >= l ) b2.push_back ( l-belong[i] );
else b1.push_back( belong[i] );
}
//cout << endl;
sort ( b1.begin() , b1.end() );
sort ( b2.begin() , b2.end() );
int len1 = b1.size();
sum1[0] = sum2[0] = 0;
for ( int i = 0 ; i < len1 ; i++ )
{
int id = i+1;
if ( id <= k ) sum1[id] = b1[i];
else sum1[id] = b1[i] + sum1[id-k];
}
int len2 = b2.size();
//cout << len1 << " " << len2 << endl;
for ( int i = 0 ; i < len2 ; i++ )
{
int id = i+1;
if ( id <= k ) sum2[id] = b2[i];
else sum2[id] = b2[i] + sum2[id-k];
}
LL ans = ( sum1[len1] + sum2[len2] )*2 ;
for ( int i = 0 ; i <= len1 && i<= k; i++ )
{
int m1 = len1 - i ;
int m2 = ( 0 , len2 - (k-i) );
ans = min ( ans , 2*(sum1[m1]+sum2[m2])+l );
}
printf ( "%I64d\n" , ans );
}
}

多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)的更多相关文章

  1. 2015 多校赛 第二场 1004 hdu(5303)

    Problem Description There are n apple trees planted along a cyclic road, which is L metres long. You ...

  2. HDU 5303 Delicious Apples(贪心 + 背包 2015多校啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 Problem Description There are n apple trees plan ...

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

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

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

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

  5. HDU 5303 Delicious Apples(思维题)

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

  6. 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 ...

  7. HDU 4614 (13年多校第二场1004)裸线段树

    题意:给你N个花瓶,编号是0  到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. 然后有2个操作. 操作1,a b c ,往在a位置后面(包括a)插b朵花,输出插入的首位置和末位置. 操作 ...

  8. [多校2015.02.1004 dp] hdu 5303 Delicious Apples

    题意: 在一个长度为L的环上有N棵苹果树.你的篮子容量是K个苹果. 每棵苹果树上都有a[i]个苹果. 问你从0点出发最少要走多少距离能拿完所有的苹果. 思路: 我们考虑dp,dp[0][i]代表顺时针 ...

  9. 2014多校第二场1011 || HDU 4882 ZCC Loves Codefires (贪心)

    题目链接 题意 : 给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道问题需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最 ...

随机推荐

  1. c# xml操作总结

    一前言 先来了解下操作XML所涉及到的几个类及之间的关系  如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家 * 1 XMLElement 主要是针对节点的一些属性进行操作 ...

  2. ffmpeg实现

    最近做一个小项目,要在线播放录制的 MP4 视频,想开源的 flash player 或 html 5 可以播放.可,虽然 MP4 是 H.264 编码,但就是播放不了.可能是封装方式(PS 方式)不 ...

  3. ubuntu-设置分辨率

    xrandr -s 1440x900 -r 60 前提是,分辨率选项中有对应的设置选项.

  4. lhgdialog.js弹出框

    官方学习网址: http://www.lhgdialog.com/ 个人认为它的样式不太好调,除此之外它也是一款实用的弹出框,专业的用来提示文字,消息,按钮添加function().ifame: 以下 ...

  5. LeetCode 287. Find the Duplicate Number (python 判断环,时间复杂度O(n))

    LeetCode 287. Find the Duplicate Number 暴力解法 时间 O(nlog(n)),空间O(n),按题目中Note"只用O(1)的空间",照理是过 ...

  6. OrmLite:no such table: tb_name

    卸载原安装程序,从新安装(感觉是因为已经存在数据库,所以不执行创建.)

  7. JDK1.7源码阅读tools包之------ArrayList,LinkedList,HashMap,TreeMap

    1.HashMap 特点:基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Has ...

  8. I/O多路复用技术

    典型应用于以下场合 1.处理多个描述字时,比如同时处理套接字和磁盘IO.终端IO 2.一个客户同时处理多个套接字 3.服务器既要处理监听套接字,又要处理已连接套接字 4.既要处理TCP.也要处理UDP ...

  9. matplotlib学习笔记.CookBook

    matplotlib 是Python下的一个高质量的画图库,可以简单的类似于MATLAB方法构建高质量的图表. 原始文章地址:http://zanyongli.i.sohu.com/blog/view ...

  10. facebook atc弱网环境搭建和踩坑总结

    facebook atc介绍 Augmented Traffic Control(又名atc)是一种模拟网络状况的工具.由facebook开源,是一个允许开发人员控制设备与互联网连接的项目.atc可以 ...