[BZOJ1634] [Usaco2007 Jan]Protecting the Flowers 护花

2024-01-09 13:09

本文主要是介绍[BZOJ1634] [Usaco2007 Jan]Protecting the Flowers 护花,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[Usaco2007 Jan]Protecting the Flowers 护花

Description

Farmer John went to cut some wood and left N (2 <= N <= 100,000) cows eating the grass, as usual. When he returned, he found to his horror that the cows were in his garden eating his beautiful flowers. Wanting to minimize the subsequent damage, FJ decided to take immediate action and transport the cows back to their barn. Each cow i is at a location that is Ti minutes (1 <= Ti <= 2,000,000) away from the barn. Furthermore, while waiting for transport, she destroys Di (1 <= Di <= 100) flowers per minute. No matter how hard he tries,FJ can only transport one cow at a time back to the barn. Moving cow i to the barn requires 2*Ti minutes (Ti to get there and Ti to return). Write a program to determine the order in which FJ should pick up the cows so that the total number of flowers destroyed is minimized.

约翰留下他的N只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时候,他看到了一幕惨剧:牛们正躲在他的花园里,啃食着他心爱的美丽花朵!为了使接下来花朵的损失最小,约翰赶紧采取行动,把牛们送回牛棚. 牛们从1到N编号.第i只牛所在的位置距离牛棚Ti(1≤Ti《2000000)分钟的路程,而在约翰开始送她回牛棚之前,她每分钟会啃食Di(1≤Di≤100)朵鲜花.无论多么努力,约翰一次只能送一只牛回棚.而运送第第i只牛事实上需要2Ti分钟,因为来回都需要时间. 写一个程序来决定约翰运送奶牛的顺序,使最终被吞食的花朵数量最小.

Input

  • Line 1: A single integer

N * Lines 2..N+1: Each line contains two space-separated integers, Ti and Di, that describe a single cow’s characteristics

第1行输入N,之后N行每行输入两个整数Ti和Di.

Output

  • Line 1: A single integer that is the minimum number of destroyed flowers

    一个整数,表示最小数量的花朵被吞食.

Sample Input

6

3 1

2 5

2 3

3 2

4 1

1 6

Sample Output

86

HINT

约翰用6,2,3,4,1,5的顺序来运送他的奶牛.

Source

Silver

题解

  • 贪心
  • 我们认为两头牛a,b谁先送回对于其他牛是不影响的
  • 我们假设一个性价比值 p=p
vara:array[0..100000,1..2]of longint;b:array[0..100000]of real;i,j,k:longint;n:longint;ans,sum:int64;
procedure sort(l,r: longint);
var i,j,y: longint; x,t:real;
begini:=l; j:=r; x:=b[(l+r) div 2];repeatwhile b[i]<x do inc(i);while b[j]>x do dec(j);if not(i>j) thenbegint:=b[i]; b[i]:=b[j]; b[j]:=t;y:=a[i,1]; a[i,1]:=a[j,1]; a[j,1]:=y;y:=a[i,2]; a[i,2]:=a[j,2]; a[j,2]:=y;inc(i); dec(j);end;until i>j;if l<j then sort(l,j);if i<r then sort(i,r);
end;beginreadln(n); sum:=0;for i:=1 to n dobeginreadln(a[i,1],a[i,2]);b[i]:=a[i,1]/a[i,2];inc(sum,a[i,2]);end;sort(1,n); ans:=0;for i:=1 to n dobegininc(ans,(sum-a[i,2])*2*a[i,1]);dec(sum,a[i,2]);end;writeln(ans);
end.

这篇关于[BZOJ1634] [Usaco2007 Jan]Protecting the Flowers 护花的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587209

相关文章

uva 1459 - Flowers Placement(二分图匹配+暴力)

题目链接:uva 1459 - Flowers Placement 暴力,在暴力的基础上用二分图匹配剪枝,如果当前位置放k,导致后面的位置不能匹配,即可回溯。 #include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;const int maxn

POJ 1157 - LITTLE SHOP OF FLOWERS (动态规划)

点击打开链接 WA了两次,因为没看清题目:花是不能不插的! d[i][j] = max ( d[i][j - 1], d[i - 1][j - 1] + a[i][j] ); 表示前i束花,放在前j个花瓶的最大审美数。 // poj 1157 (IOI 1999 - dp)// [6/13/2014 wind]#include <iostream>#include

CF451E: Devu and Flowers(容斥原理 + 考虑反面 + golang组合模版)

题目截图 题目翻译 题目分析 正难则反,考虑所有不符合的例子 由于n很小,所以可以状态压缩二进制遍历完全部不符合例子的组合 对于不符合的例子,假设其中第i个不符合,那么就消耗掉fi + 1个球 以此类推,减剩下s2个球 这时候使用隔板法分给n个箱子,加上n - 1个挡板,就是comb(s2 + n - 1, n - 1) 对于容斥原理,奇偶个数要对应不同的符号,这里需要注意 go代

bzoj1690/poj3621[Usaco2007 Dec]奶牛的旅行

题目链接:bzoj poj 题目大意: 有N 个景点,参观第i 个景点会给奶牛带来Fi 点欢乐度。景点间有M 条道路,道路都是单行道,第i 条道路从Si 开始通向Ti,长度为Li。奶牛们可以选择从任意一个景点出发,在晚上结束的时候,奶牛必须回到这个起点和约翰汇合。 奶牛们想让欢乐度尽量大,但经讨厌走路,所以需要设计一条游览线路。定义一条游览线路的“欢乐指数”为该线路上所有景点的欢乐度之和与路

bzoj1594[Usaco2008 Jan]Haybale Guessing猜数游戏

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1594 题目大意: N个数排成一列,有q个询问。每个询问告诉你区间[l,r]的最小值是多少(这N个数各不相同)。问你这q个询问有没有矛盾,有的话从哪里开始有矛盾。 题解: 二分+线段树 有人用神奇姿势の并查集来代替线段树来搞..但是我不懂QwQ 于是我就打了线段树。。代码迷の长&

bzoj1697[Usaco2007 Feb] Cow Sorting牛排序

题目链接:bzoj1697 题目大意: N(1 <= N <= 10,000)头牛排队。农夫想把牛按脾气的大小排序(从小到大)。每一头牛的脾气都是一个在1到100,000之间的整数并且没有两头牛的脾气值相同。在排序过程中,可以交换任意两头牛的位置。需要X+Y秒来交换脾气值为X和Y的两头牛。求把所有牛排好序的最短时间。 题解: 置换 跟bzoj1119差不多 #include<cstdi

poj 动态规划DP - 1157 LITTLE SHOP OF FLOWERS

这里有一份DP题目列表点击打开链接,大家想专门刷DP的可以看一下。 我们有不同的花和花瓶,每束花在不同的花瓶里有不同的价值,最后找出价值最大的放花顺序。 动态规划最重要的是找出递推式,我们将每束花在不同花瓶的价值放在data[i][j]里,map[i][j]表示第i束花插在第1-j号花瓶中全局最大的价值,递推式为: map[i][j] = max(map[i-1][j-1]+data[i][

Kaggle Tabular Playground Series - Jan 2022 的baseline和日期特征处理

来源:DeepHub IMBA本文共1500字,建议阅读8分钟本文作者将使用 HistGradientBoostingRegressor 进行测试。 Kaggle 决定将他们每月的表格竞赛延续到 2022 年这对于我们来说是非常好的消息。并且Kaggle 表示他们已经考虑大家的评论,所以我希望这意味着他们将不再使用庞大到使系统崩溃的数据集,这次1月的比赛数据集就不是很大。 在我看来,202

CodeForces451E Devu and Flowers

题目链接 问题分析 没有想到母函数的做法…… 其实直接看题思路挺简单的。发现如果每种花都有无限多的话,问题变得十分简单,答案就是\(s+n-1\choose n - 1\)。然后发现\(n\)只有\(20\),于是大力容斥一波就完事了。 参考代码 #include <cstdio>const long long Max_n = 30;const long long Mod = 10000000

bzoj 1690: [Usaco2007 Dec]奶牛的旅行

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1690 思路:0-1分数规划 其实0-1分数规划重要的是它的思想,就像最小乘积XXX(生成树,匹配等)一样,知道了思想,再套一个对应的的算法即可 一个不错的博客:http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html