多校第二场 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,问怎样组合问题的处理顺序可以使得耗费达到最 ...
随机推荐
- B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash
一开始以为是dp,后来看了一下标签...二分答案?之前也想过,但是没往下想,然后之后的算法就顺理成章,先求出第一个地图的所有子矩阵的hash值,然后求第二个,在上一个地图例二分查找,然后就没了. 算法 ...
- VUEJS2.0源码理解--优
VUEJS2.0源码理解 http://jiongks.name/blog/vue-code-review/#pingback-112428
- Juniper交换机维护
Juniper交换机维护操作之一: 1.1 交换机启动和关闭 1.1.1 重新启动 1. 使用具有足够权限的用户名和密码登陆CLI命令行界面. 2. 在提示符下输入下面的命令: use ...
- js例子
1.子菜单下拉 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- 动画和图形:OpenGL ES
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...
- 【C】一些字符串处理函数
1.复制函数 我更愿意称之为”字符串覆盖函数” a. strcpy(str1,str2); 将字符串str2 覆盖到str1上 b. strncpy(str1,str2,n); 2.拼接函数 a. s ...
- android黑科技系列——微信抢红包插件原理解析和开发实现
一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...
- C#监测方法执行效率
System.Diagnostics.Stopwatch watch = new Stopwatch(); watch.Start(); // 开始监视代码运行时间 //需要监测的代码 dothing ...
- MeayunDB学习笔记(一) MeayunDB介绍及安装
系列目录 MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 ...
- 杭电 2095 find your present (2)【位运算 异或】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2095 解题思路:因为只有我们要求的那个数出现的次数为奇数,所以可以用位运算来做,两次异或同一个数最后结 ...