多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)
题目链接:
题目大意:
在一个周长为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(背包+贪心)的更多相关文章
- 2015 多校赛 第二场 1004 hdu(5303)
Problem Description There are n apple trees planted along a cyclic road, which is L metres long. You ...
- HDU 5303 Delicious Apples(贪心 + 背包 2015多校啊)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 Problem Description There are n apple trees plan ...
- HDU 5303 Delicious Apples (2015多校第二场 贪心 + 枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- HDU 5303 Delicious Apples (贪心 枚举 好题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- HDU 5303 Delicious Apples(思维题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- 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 ...
- HDU 4614 (13年多校第二场1004)裸线段树
题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. 然后有2个操作. 操作1,a b c ,往在a位置后面(包括a)插b朵花,输出插入的首位置和末位置. 操作 ...
- [多校2015.02.1004 dp] hdu 5303 Delicious Apples
题意: 在一个长度为L的环上有N棵苹果树.你的篮子容量是K个苹果. 每棵苹果树上都有a[i]个苹果. 问你从0点出发最少要走多少距离能拿完所有的苹果. 思路: 我们考虑dp,dp[0][i]代表顺时针 ...
- 2014多校第二场1011 || HDU 4882 ZCC Loves Codefires (贪心)
题目链接 题意 : 给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道问题需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最 ...
随机推荐
- bind(),call(), apply()方法的区别是什么?
bind(),call(), apply()方法的区别是什么? 共同点:改变this指向,任何调用都不在起作用 bind() 改变this的指向,不会调用函数,返回一个新的函数 var o ={a:' ...
- 如何用SVG写一个环形进度条以及动画
本次案例主要使用了svg的三个元素,分别为circle.text.path,关于svg的介绍大家可以看MDN上的相关教程,传送门 由于svg可以写到HTML中,所以这里我们就可以很方便的做进度条加载动 ...
- LUA 创建文件和文件夹
创建文件: os.execute('mkdir e:\\aa') 创建文件夹: os.execute("cd.>e:\\wang.ini")
- canvas的常用api
canvas 标签 <canvas width="600" height="400" id="canvas"></canv ...
- 使用原生JS实现简单的ajax
Ajax是一种使用javascript内置对象向服务器发送请求/接收响应的技术.它可以再页面已经完全显示出来之后再和服务器进行少量的数据交互,所以可以实现局部内容的刷新. ajax的实现,主要是靠ja ...
- 定义maven的项目结构
创建一个Maven 的父项目 新建一个maven项目,选中create a simple project 填写以下内容: 如下内容: Group Id :edu.zipcloud.cloudstree ...
- Javassist介绍
要想将编译时不存在的类在运行时动态创建并加载,通常有两种策略: 1. 动态编译 2. 动态生成二进制字节码(.class) 对于第二种策略,实际上已经有诸多比较成熟的开源项目提供支持,如CGLib.A ...
- Appium 环境搭建 - macOS
本文没有安装 Appium Desktop,Appium Server 直接在命令行中进行即可. Homebrew,macOS 包管理器: ruby -e "$(curl -fsSL htt ...
- 写给VC++ Windows开发的初学者 一片不错的博文
不知不觉2010年都过了半年了,想来我学C语言已经12个年头了(从1998年开始),用VC++也有11年了,最早使用Turbo C2.0 ,也学过汇编,后来使用Borland C++3.0 .Micr ...
- 信息检索及DM必备知识总结:luncene
原文链接:http://blog.csdn.net/htw2012/article/details/17734529 有少量修改!如有疑问,请访问原作者. 一:信息检索领域: 信息检索和网络数据领域( ...