奶牛

贪心算法小结

匿名 (未验证) 提交于 2019-12-02 23:43:01
M-Cleaning Shifts 描述 你的任务是帮助FJ安排一些奶牛,使每段时间至少有一只奶牛被安排来做这件事。并且奶牛数应尽可能小。如果不可能办到,输出-1 输入 注意,输入包含多组测试数据,请处理到文件结束 * 第二行至N+1行: 每一行包括奶牛能工作的开始和结束时间。闭区间。 输出 *每组数据一行,输出完成清洁所需最少的奶牛数,如果不可能办到,输出-1 样例输入 3 10 1 7 3 6 6 10 样例输出 2 提示 选择 cows #1 和 #3即可,没有更优的方案了 .   思路:仍旧采用贪心的解法 ,选取最优解。为了使用最小的牛覆盖所有时间段 ,就要使用开始的早,工作时间长的牛(具体实现使用cmp排序,优先级高的是开始时间,开始时间相同时比较结束时间,结束时间晚的优先);还要考虑一点即是所有牛的工作时间段 需要覆盖整个T时间段,中间不能有空缺(可以进行循环比较,当循环到某个牛该牛的工作开始时间比上一个工作的牛的结束时间相等或大于的时候,跳出循环)。代码如下: #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #include <math.h> #include <queue> #include <map> #include

luogu P2627 修剪草坪

杀马特。学长 韩版系。学妹 提交于 2019-12-02 21:21:31
题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪。现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠。 然而,Farm John的草坪非常脏乱,因此,Farm John只能够让他的奶牛来完成这项工作。Farm John有N(1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的,奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。 靠近的奶牛们很熟悉,因此,如果Farm John安排超过K只连续的奶牛,那么,这些奶牛就会罢工去开派对:)。因此,现在Farm John需要你的帮助,计算FJ可以得到的最大效率,并且该方案中没有连续的超过K只奶牛。 输入格式 第一行:空格隔开的两个整数 N 和 K 第二到 N+1 行:第 i+1 行有一个整数 E_i 输出格式 第一行:一个值,表示 Farm John 可以得到的最大的效率值。 单调队列优化动态规划 在第i点时,在i-k到i中肯定有一个点j不能选择 f[i]=max(f[i],f[j-1]+sum[i]-sum[j]) (i-k<=j<=i) n方枚举断电肯定不能过 f[j-1]+sum[j]只和下标j有关系,因为sum[i]已经确定了,那么只要让f[j-1]+sum[j]最大就好了

P1004 奶牛与牧场

左心房为你撑大大i 提交于 2019-12-02 18:46:27
题目描述 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供 \(a\) 头牛吃 \(b\) 天,或可供 \(c\) 头牛吃 \(d\) 天,那么,这片牧场每天新生的草量最多可供几头牛吃1天? 输入格式 输入包含四个整数 \(a,b,c,d(1 \le a,b,c,d \le 1000, a \lt c, a \cdot b \gt c \cdot d)\) 。 输出格式 输出一个整数,用于表示牧场每天新生的草量最多可供多少头牛吃一天。 样例输入 15 20 20 10 样例输出 10 来源: https://www.cnblogs.com/problems/p/11758235.html

P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…

心不动则不痛 提交于 2019-12-02 11:29:47
典型树上dp,直接暴力算会超时,小心呀 #include<cstring> #include<iostream> #include<algorithm> #include<cstdio> #include<vector> #define maxn 100010 using namespace std; typedef long long ll; struct Node { int p; ll len; Node(int a, ll b) :p(a), len(b) {} }; vector<Node>G[maxn]; void insert(int be, int en,ll len) { G[be].push_back(Node(en, len)); } int n, m; ll sum = 0; ll ran[maxn]; ll ans[maxn]; ll list[maxn]; int dfs1(int x, int fa) { ll k = 0; for (int i = 0; i < G[x].size(); i++) { int p = G[x][i].p; ll ln = G[x][i].len; if (p == fa) continue; dfs1(p, x); k = ran[p]; ans[x] += (ans[p] + ran[p] * ln); ran[x

奶牛健美操

感情迁移 提交于 2019-12-01 10:09:14
Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑。这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径。简单的说来, 这些点的布局就是一棵树,且每条边等长,都为1。 对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最大值, 我们称之为这个路径集合的直径。如果直径太大,奶牛们就会拒绝锻炼。 Farmer John把每个点标记为1..V (2 <= V <= 100,000)。为了获得更加短 的直径,他可以选择封锁一些已经存在的道路,这样就可以得到更多的路径集合, 从而减小一些路径集合的直径。 我们从一棵树开始,FJ可以选择封锁S (1 <= S <= V-1)条双向路,从而获得 S+1个路径集合。你要做的是计算出最佳的封锁方案,使得他得到的所有路径集合 直径的最大值尽可能小。 Farmer John告诉你所有V-1条双向道路,每条表述为:顶点A_i (1 <= A_i <= V) 和 B_i (1 <= B_i <= V; A_i!= B_i)连接。 我们来看看如下的例子:线性的路径集合(7个顶点的树) 1---2---3---4---5---6---7 如果FJ可以封锁两条道路,他可能的选择如下: 1---2 | 3---4 | 5---6---7 这样最长的直径是2,即是最优答案

p1842 奶牛玩杂技 题解

假装没事ソ 提交于 2019-11-30 19:28:22
感觉其他dalao讲的不是很明白啊,我这样的蒟蒻看不懂啊. 在luogu这个dalao遍地的地方我蒟蒻看个题解也不明白,我为跟我同病相怜的蒟蒻写一篇吧 其实真是不太明白 ,大部分题解都是只说 体重大的在下面 力量大的在下面 (和) 没有证明啊.... 设wa + sa > wb + sb且a与b相邻 a在上面,b在下面时 那么a和b上面的牛总重为w a的压扁指数为w - sa b为w + wa - sb 因为wa + sa > wb + sb 那么wa - sb > wb - sa 因为wb >= 0,所以wa - sb > - sa 所以w + (wa - sb) > w - (sa),所以当a在上时,总压扁指数为w + wa - sb(不考虑上面的牛的压扁指数) b在上面,a在下面时 a -> w + wb - sa b -> w - sb 因为wa + sa > wb + sb 所以wb - sa < wa - sb 又因为wa > 0 所以wb - sa < -sb 所以w + (wb - sa) < w + (-sb),所以当b在上时,总压扁指数为w - sb(不考虑上面的牛的压扁指数) 综上 当a在上时w + wa - sb b在上时 w - sb 所以力量加体重大(w + s 大)的在下面比在上面更优 如果考虑上面的牛的话,若上面牛的总压扁指数比a和b的大

【纪中受难记】——C2Day4:水题大赏

不想你离开。 提交于 2019-11-30 18:58:28
三道水题,但还有水人。 40/100/100 3810. 【USACO2014 3月】Watering the Fields (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto ProblemSet Description 由于缺少雨水,FJ 想要建造一个在他的N(1 N 2000)块田之间送水的灌溉系统。 每块田地i 由一个二维平面上独一无二的点(xi; yi) 描述,这里有0 <= xi; yi <=1000。在两块田地i 和j 之间建造水管的费用等于它们之间欧几里得距离的平方:(xi-xj)^2+(yi-yj)^2 FJ 希望建造一个连接所有田地并且花费最小的管道系统——满足从任意田地出发,水可以通过一系列管道到达另外的任意一块田地。 不幸的是,帮助FJ 安装灌溉系统的承包商拒绝安装任何花费(欧几里得长度平方)小于C(1 C 1; 000; 000)的管道。 请帮助FJ 计算他最少需要为连接他所有田地的管道网络支付多少钱。 Input 第一行:整数N 和C。 第2 至N + 1 行:第i 行包含整数xi 和yi。 Output 输出单独一行一个整数——连接所有田地的管道网络的最小费用,或者当满足条件的网络不可能建造时输出-1。 Sample Input 3 110

P5201 [USACO19JAN]Shortcut

烂漫一生 提交于 2019-11-30 06:32:49
题目背景 USACO 19年一月月赛金组第三题 题目描述 每天晚上,Farmer John都会敲响一个巨大的铃铛,召唤他的奶牛们前来牛棚享用晚餐。奶牛们都急切地想要前往牛棚,所以她们都会沿着最短的路径行走。 农场可以描述为N块草地(1≤N≤10,000),方便起见编号为1…N,牛棚位于草地1。草地之间由M条双向的小路连接(N−1≤M≤50,000)。每条小路有其通过时间,从每块草地出发都存在一条由一些小路组成的路径可以到达牛棚。 草地i中有ci头奶牛。当她们听到晚餐铃时,这些奶牛都沿着一条消耗最少时间的路径前往牛棚。如果有多条路径并列消耗时间最少,奶牛们会选择其中“字典序”最小的路径(也就是说,她们通过在两条路径第一次出现分支的位置优先选择经过编号较小的草地的方式来打破并列关系,所以经过草地7、3、6、1的路径会优先于经过7、5、1的路径,如果它们所消耗的时间相同)。 Farmer John担心牛棚距离某些草地太远。他计算了每头奶牛路上的时间,将所有奶牛消耗的时间相加,称这个和为总移动时间。他想要通过额外添加一条从牛棚(草地1)连接到某块他选择的其他草地的、通过时间为T(1≤T≤10,000)的“近道”来尽可能地减少总移动时间。当一头奶牛在她平时前往牛棚的路上偶然看见这条近道时,如果这条近道能够使她更快地到达牛棚,她就会走这条路。否则,一头奶牛会仍然沿着原来的路径行走

noi.openjudge 10:河中跳房子

江枫思渺然 提交于 2019-11-29 15:59:14
http://noi.openjudge.cn/ch0111/10/ 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。 在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。 农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M (0 ≤ M ≤ N) 个岩石。 请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少? 输入 第一行包含三个整数L, N, M,相邻两个整数之间用单个空格隔开。 接下来N行,每行一个整数,表示每个岩石与起点的距离。岩石按与起点距离从近到远给出,且不会有两个岩石出现在同一个位置。 输出 一个整数,最长可能的最短跳跃距离。 样例输入 25 5 2 2 11 14 17 21 样例输出 4 提示

洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解

雨燕双飞 提交于 2019-11-28 11:12:53
题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节。 由于牛棚不太大,FJ通过指定奶牛必须遵循的穿越路线来确保奶牛的乐趣。为了实现这个让奶牛在牛棚里来回穿梭的方案,FJ在第i号隔间上张贴了一个“下一个隔间”Next_i(1<=Next_i<=N),告诉奶牛要去的下一个隔间;这样,为了收集它们的糖果,奶牛就会在牛棚里来回穿梭了。 FJ命令奶牛i应该从i号隔间开始收集糖果。如果一只奶牛回到某一个她已经去过的隔间,她就会停止收集糖果。 在被迫停止收集糖果之前,计算一下每头奶牛要前往的隔间数(包含起点)。 输入格式 第1行 整数n。 第2行到n+1行 每行包含一个整数 next_i 。 输出格式 n行,第i行包含一个整数,表示第i只奶牛要前往的隔间数。 样例解释 有4个隔间 隔间1要求牛到隔间1 隔间2要求牛到隔间3 隔间3要求牛到隔间2 隔间4要求牛到隔间3 牛1,从1号隔间出发,总共访问1个隔间; 牛2,从2号隔间出发,然后到三号隔间,然后到2号隔间,终止,总共访问2个隔间; 牛3,从3号隔间出发,然后到2号隔间,然后到3号隔间,终止,总共访问2个隔间; 牛4,从4号隔间出发,然后到3号隔间,然后到2号隔间,然后到3号隔间,终止,总共访问3个隔间。 翻译提供者:吃葡萄吐糖 题目描述