Hdu5303 Delicious Apples 贪心
题目链接:
题意:
有一条环形的长为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 贪心的更多相关文章
- [2015hdu多校联赛补题]hdu5303 Delicious Apples
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 题意:在一个长为L的环形路径上种着一些苹果树,告诉你苹果树的位置(题目中以0~L指示坐标)及苹果 ...
- 解题报告 之 HDU5303 Delicious Apples
解题报告 之 HDU5303 Delicious Apples Description There are n apple trees planted along a cyclic road, whi ...
- HDU 5303 Delicious Apples (贪心 枚举 好题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- hdu5303(2015多校2)--Delicious Apples(贪心+枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- Delicious Apples (hdu 5303 贪心+枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- HDU 5303 Delicious Apples (2015多校第二场 贪心 + 枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- 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棵 ...
- 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 5303 Delicious Apples(思维题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
随机推荐
- Smarty的应用
smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.inc.php这是入口文件(3)plugins:自己写的插件文件夹(4)templates_ ...
- Sonar 规则
bug类型: 1.".equals()" should not be used to test the values of "Atomic" classes. ...
- Clickhouse DDL&DML
(1)添加列: alter table [db.]table_name add column column_name [type] [default_expr] [after name_after] ...
- HDU_1006_Tick and Tick
Tick and Tick Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- input password密码验证跳转页面
代码如下: 查询密码 <input type="password" id="pwd" /> 页面如下: 密码校验成功后跳转页面: window.lo ...
- oracle中的冷热备份
oracle有四种备份方法:冷备份.热备份.RMAN备份.逻辑备份. 其中冷备份和热备份都是用操作系统命令对oracle文件直接进行拷贝, 不同的是冷备份是把数据库关闭后再备份,备份过程中也要关闭数据 ...
- 01java基础
01.java基础-18/07/09 1.System.out.print();和System.out.println();的区别是什么 System.out.println();打印的时候自带了换行 ...
- 洛谷——P2007 魔方
P2007 魔方 常神牛家的魔方都是3*3*3的三阶魔方,大家都见过. 模拟即可: #include<iostream> #include<cstdio> #include&l ...
- HDU - 6264 - Super-palindrome(思维)
题意: 给出一个字符串,使得所有的奇数连续子串为回文串,输出最小变化次数 思路: 分析过后,只存在两种情况,1全部为一种字母,2形如abab交替类型 对于奇数位和偶数位单独计数,只需计算出奇数位或者偶 ...
- Python学习第二阶段,day1, 装饰器,生成器,迭代器
装饰器 不得不说,这是对初学者最难以理解的概念了,虽然我学过面向对象,但还是被搞懵逼了..前面还好理解,主要是后面“装饰器的装饰器”我理解不了.装饰器工厂,根据传入的参数不同去返回不同的装饰器,我不得 ...