POJ 3616 奶牛挤奶】的更多相关文章

Milking Time 贝茜是一个勤劳的牛.事实上,她如此​​专注于最大化她的生产力,于是她决定安排下一个N(1≤N≤1,000,000)小时(方便地标记为0..N-1),以便她生产尽可能多的牛奶. 农民约翰有一个M(1≤M≤1,000)可能重叠的间隔列表,他可以在那里进行挤奶.每个区间我有一个起始小时(0≤starting_houri≤N),一个结束小时(starting_houri <ending_houri≤N),以及相应的效率(1≤efficiencyi≤1,000,000),表示他可…
题意:奶牛挤奶问题,每只奶牛在[a,b]的时间内挤奶,要求挤奶的过程中不能不打扰,且只能自己一个人独享挤奶的机器.问最少需要多少个挤奶的机器? 思路: 对奶牛挤奶开始的时间从小到大开始排序. 将正在工作的奶牛放在"队列"中,这里采用的是"优先队列" 如果后面的一个奶牛的开始时间大于在队列中工作的结束时间,则不需要加机器,只需要将正在工作的奶牛pop出去,然后放入新的奶牛  否则要加机器 代码中对思路3的实现 pq.push(cow[]); ; i < n; i…
题意:奶牛产奶,农夫有m个时间段可以挤奶,在工作时间 f t 内产奶量为m,每次挤完奶后,奶牛需要休息R.问:怎么安排使得产奶量最大? 思路:区间dp  dp[i]表示第i个时段 对农夫工作的结束时间由小到大排序 将第i时段 如果前面与其不冲突记录下来 inter[k].e+r>inter[i].b 表示冲突 递推公式 dp[i]=max(dp[i-],dp[p[i]]+inter[i].w) 前面一个表示不作为,后面一个表示选取上一个不冲突的时间+这次的产奶量 解决问题的代码: #includ…
2015-09-21 奶牛挤奶 题目大意就是这只Bessie的牛产奶很勤奋,某农民有一个时刻表,在N时间内分成M个时间段,每个时间段Bessie会一直产奶,然后有一定的效益,并且Bessie产奶后要休息两个小时. 这是一道很简答的DP,因为区间是不重复的,所以我们只要快排一下就好了,然后从第一个时间段到最后一个时间段 状态转移方程: dp[i][j]=dp[i-1][j] j<i; dp[i][i]=MAX(dp[i][i],dp[i][j]+list[i].eff); j<i 很简单是吧,我…
传送门: http://poj.org/problem?id=3616 Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13406   Accepted: 5655 Description Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she dec…
题目链接 http://poj.org/problem?id=3616 题意:在一个农场里,在长度为N个时间可以挤奶,但只能挤M次,且每挤一次就要休息t分钟: 接下来给m组数据表示挤奶的时间与奶量求最大挤奶量 看似很复杂其实就是求大递增序列即可,先将M次挤奶进行排序按照end从小到大排序然后判断s[i].sta-r>=s[j].end时可以加上. #include <iostream> #include <algorithm> #include <cstring>…
题目链接:http://poj.org/problem?id=3616 有头牛产奶n小时(n<=1000000),但必须在m个时间段内取奶,给定每个时间段的起始时间和结束时间以及取奶质量 且两次取奶之间须间隔r-1个小时,求最大取奶质量 也就是说r = 2时 3分结束取奶,至少在5分才能取. 按照时间排序,dp[i]表示i时段的最大产奶量 //#pragma comment(linker, "/STACK:102400000, 102400000") #include <a…
题意:奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量. 详见代码 #include <stdio.h> #include <algorithm> #include <cstring> #include <cstdlib> #include <cmath> #include <memory> #inclu…
题意:奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量.思路:一定是对时间段dp,然后就是两个for的事了.只要前面能满足条件的状态就可以转移过来,然后取最大,不过要先排序.状态设定:dp[i]表示从开始取,到满足取第i段的最优值. 定义dp[i]表示第i个时间段挤奶能够得到的最大值,拆开来说,就是前面 i – 1个时间段任取0到i – 1个时间段挤奶,然后加上这个…
题目链接:http://poj.org/problem?id=3616 题目大意:给你时间N,还有M个区间每个区间a[i]都有开始时间.结束时间.生产效率(时间都不超过N),只能在给出的时间段内生产,要求合理安排时间求出最大生产价值. 解题思路:把区间按开始时间排序,于是有状态转移方程:dp[i]=max(dp[i],dp[j]+a[i].val)(前提是a[j].end+r<=a[i].start,i是区间的序号,j是i前面的区间) 相当于最大递增子序列的变形,写法差不多. 代码: #incl…
                                                                                             Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8048   Accepted: 3388 Description Bessie is such a hard-working cow. In fact, she i…
题意:在给予的N个时间里,奶牛Bessie在M个时间段里进行产奶,但是每次产奶后都要休息R个时间 M个时间段里,分别有开始时间start和结束时间end,和该时间段里产奶的效率efficiency 求问,应该如何选择哪些时间段进行产奶,才能使得效率最大化 我的错误做法:设D[i]为到时间i以内,所能够产奶的最大量,从而d[i] = max(d[i-1], d[st[k]]+ef[k]); 最终还是TLE了,由于N最大为1000000,且k最大为1000,所以综合还是太花费时间了 正确思路:我看到…
Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7265   Accepted: 3043 Description Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤…
题意:奶牛拍一系列电影,n头牛拍m部电影,同一部电影种的搭档们距离为1,求最小距离? 思路:Floyd 图 最短路径 存图: 初始化图 for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) f[i][j] = INF; f[i][i] = 0; } 存图: for (int i = 0; i < k; i++) { scanf("%d", &a[i]); for (int j = 0; j &l…
题意:每头奶牛需要涂抹防晒霜,其中有效的范围 min~max ,现在有L种防晒霜,每种防晒霜的指数为 f 瓶数为 l,问多少只奶牛可以涂上合适的防晒霜?思路: 优先队列+贪心 当奶牛的 min<f 时 把奶牛的max 进队列 取队列 与 f比较 如果小于 继续 否则 l减去1 ans+1 思路解释:min<f时表示可以访问, 取max与f进行比较,因为先前对f进行排序,所以数小的在前面,这样可以做到不浪费 解决问题的代码: #include <iostream> #include…
Milking Time 直接翻译了 Descriptions 贝茜是一个勤劳的牛.事实上,她如此​​专注于最大化她的生产力,于是她决定安排下一个N(1≤N≤1,000,000)小时(方便地标记为0..N-1),以便她生产尽可能多的牛奶. 农民约翰有一个M(1≤M≤1,000)可能重叠的间隔列表,他可以在那里进行挤奶.每个区间我有一个起始小时(0≤starting_houri≤N),一个结束小时(starting_houri <ending_houri≤N),以及相应的效率(1≤efficien…
Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 15682   Accepted: 5597 Case Time Limit: 1000MS Description FJ has moved his K (1 <= K <= 30) milking machines out into the cow pastures among the C (1 <= C <= 200) co…
题意:给你N的时间,M的工作时间段,每个时间段有一个权重,还有一个R,每次完成一个工作需要休息R,问最后在时间N内,最大权重是多少. 思路:很简单的DP,首先对区间的右坐标进行排序,然后直接转移方程就是dp[i] = max(dp[i] , dp[j] + work[i].c) ,判断条件就是这两个区间加上一个休息时间R是否会相交. #include <set> #include <map> #include <stack> #include <cmath>…
题意:找元素关于对角线左或右对称的最大矩阵 思路:左右对角线只需要遍历一条就可以了.只要当前点往上遍历和往后遍历一样就可以. #include<iostream> #include<string> #include<algorithm> #include<cstdlib> #include<cstdio> #include<set> #include<map> #include<vector> #include…
Description Bessie ≤ N ≤ ,,) hours (conveniently labeled ..N-) so that she produces as much milk as possible. Farmer John has a list of M ( ≤ M ≤ ,) possibly overlapping intervals ≤ starting_houri ≤ N), an ending hour (starting_houri < ending_houri ≤…
典型的给出区间任务和效益值,然后求最大效益值的任务取法. 属于一维DP了. 一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少. 注意. 这表示当前任务一定要选择,可是终于结果是不一定选择最后一个任务.故此最后须要遍历找到table数组的最大值,当然计算过程中使用一个数记录终于最大值也是能够的. 状态转移方程就是: tbl[i] = MAX({from tbl[0]->tbl[i-1] }+ weight[i] ),即区间0到i-1加上i的当前效益值. #include <…
Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as possible. Farmer John ha…
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; int N, M, R; // N个小时, M个时间间隔, R个休息时间 + ; struct Cow { int start; int end; int value; Cow(, , ) : start(s),…
第一眼看是线段交集问题,感觉不会= =.然后发现n是1000,那好像可以n^2建图再做.一想到这里,突然醒悟,直接记忆化搜索就好了啊..太蠢了.. 代码如下: #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; + ; int n,m,r; struct node { int l,r,val; void read() {scanf("%d%d%d&qu…
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; ; struct edge{ int start; int end; int w; }e[N]; bool cmp(edge a,edge b) { return a.start<b.start; } int dp[N]; int main() { int n,m,…
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C≤200)头奶牛,在奶牛和挤奶器之间有一组不同长度的路.K个挤奶器的位置用1-K的编号标明,奶牛的位置用K+1-K+C 的编号标明.每台挤奶器每天最多能为M(1≤M≤15)头奶牛挤奶.寻找一个方案,安排每头奶牛到某个挤奶器挤奶,并使得C 头奶牛须要走的全部路程中的最大路程最小.每一个測试数据中至少有…
题目链接: Poj 2112 Optimal Milking 题目描述: 有k个挤奶机,c头牛,每台挤奶机每天最多可以给m头奶牛挤奶.挤奶机编号从1到k,奶牛编号从k+1到k+c,给出(k+c)*(k+c)的矩阵maps,maps[i][j]代表i到j的距离,问到达挤奶机需要步行最长的奶牛最短要走多少距离?(刚开始看到题目很迷啊,怎么算测试实例答案都是1,原来是非真实存在的路径长度都记为0,那么maps中的零就是INF咯). 解题思路: 因为要找出步行最长距离的奶牛最少走多远,每个奶牛到达挤奶机…
(点击此处查看原题) 题目分析 题意:在一个农场中有k台挤奶器和c只奶牛,每个挤奶器最多只能为m只奶牛挤奶,每个挤奶器和奶牛都视为一个点,将编号1~k记为挤奶器的位置,编号k+1~k+c记为奶牛的位置,奶牛只能在这k+c个位置之间移动,输入将给出每个位置和其余k+c个位置的之间道路距离,其中0代表无法到达 问让所有奶牛进行挤奶的情况下(也就是让每头奶牛都走到一个挤奶器的位置上去,而且这个挤奶器上的奶牛不得超过m个),求c只奶牛中走的最远的奶牛的最小移动总距离. 思路:首先思考到这题目要二分答案,…
直达–>POJ 3279 Fliptile 题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变成0,要输出踩砖块位置. 思路:也不知道为什么归类在搜索里,问了大牛,枚举第一行的情况(1< #include <cstdio> #include <cstring> using namespace std; int N,M; int maps[100][100]; int dx…
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 13968 Accepted: 5044 Case Time Limit: 1000MS Description FJ has moved his K (1 <= K <= 30) milking machines out into the cow pastures among the C (1 <= C <= 200) cows.…