Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4283 | Accepted: 1775 |
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 ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as possible.
Farmer John has a list of M (1 ≤ M ≤ 1,000) possibly overlapping intervals in which he is available for milking. Each interval i has a starting hour (0 ≤ starting_houri ≤ N), an ending hour (starting_houri <ending_houri ≤ N), and a corresponding efficiency (1 ≤ efficiencyi ≤ 1,000,000) which indicates how many gallons of milk that he can get out of Bessie in that interval. Farmer John starts and stops milking at the beginning of the starting hour and ending hour, respectively. When being milked, Bessie must be milked through an entire interval.
Even Bessie has her limitations, though. After being milked during any interval, she must rest R (1 ≤ R ≤ N) hours before she can start milking again. Given Farmer Johns list of intervals, determine the maximum amount of milk that Bessie can produce in the N hours.
Input
* Line 1: Three space-separated integers: N, M, and R
* Lines 2..M+1: Line i+1 describes FJ's ith milking interval withthree space-separated integers: starting_houri , ending_houri , and efficiencyi
Output
* Line 1: The maximum number of gallons of milk that Bessie can product in the N hours
Sample Input
12 4 2 1 2 8 10 12 19 3 6 24 7 10 31
Sample Output
43
题意:
给出 N,M,R,代表总共时长为 N ,有 M 个容器,每个容器需要间隔 R 的时间才能用下一个。需要给牛喂奶,后给出 M 个容器的使用时间 S(起时),E(终时)与 产量 W。要如何安排时间使最后产量达到最大。
思路:
DP。先将时间以结束时间由小到大排序一遍。dp [ i ] 代表选择第 i 个容器时可以获得的最大产量。所以 dp [ i ] = max (dp [ j ] + cow [ i ].val,dp [ i ] )( j <= i && cow[ j ].End + r <= cow [ i ].Sta )。最后还要算出所有容器 dp 出来的最大值才是答案。初始化时,每个 dp 对应为自身的 val 值,所以 dp [ i ] 代表一定会选择自己本身的这个容器。
为什么要由小到大排序?
因为要最大利用时间,若不排序的话,那么根据判断条件 cow [ j ].End + r <= cow [ i ].Sta,要求的是上一个的结束时间 + 间隙 小于 要该容器的开始时间才能进行更新,不排序的话,那么有些容器就可能会跟新不到了。故要由小到大排序。
AC:
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int MAX = 1005; typedef struct { int Sta, End, val; } node; node cow[MAX]; int dp[MAX]; int cmp(node a, node b) { return a.End < b.End; } int main () { int n, m ,r; scanf("%d%d%d", &n, &m, &r); for (int i = 0; i < m; ++i) scanf("%d%d%d", &cow[i].Sta, &cow[i].End, &cow[i].val); sort(cow, cow + m, cmp); for (int i = 0; i < m; ++i) dp[i] = cow[i].val; int max_num = 0; for (int i = 0; i < m; ++i) { for (int j = i + 1; j < m; ++j) { if (cow[i].End + r <= cow[j].Sta) dp[j] = max(dp[j], dp[i] + cow[j].val); } max_num = max(max_num, dp[i]); } printf("%d\n", max_num); return 0; }
相关推荐
### USACO 题目解析:Milking Cows #### 题目背景与要求 本题目来源于美国计算机奥林匹克竞赛(USACO),题目名为“Milking Cows”。题目描述了一个有趣的场景:三位农民每天早上给三头牛挤奶,并给出了各自的挤奶...
if (time [i]) time = t[i]; } printf("%d\n", time); return 0; } ``` 1. **初始化**:声明所需变量,包括用于存储每个家务完成时间的数组 `t`。 2. **读取输入**:读取家务数量 `n` 及每个家务的相关信息。 3...
三、自动化milking系统:使用自动milking机器人,代替传统的手动milking方式,提高milking效率和质量。该系统还可以实时监控奶牛的milking过程,并自动记录milking数据。 四、健康管理系统:通过智能感知系统和健康...
11. **Milking Grid** - KMP算法用于寻找最小重复子矩阵,计算长度和宽度的最小公倍数。 12. **Popular Cows** - 找到图中所有可达顶点,通过反向边和强连通分量(Strongly Connected Components, SCC)进行缩点。 ...
接着,1.2节重点是完整搜索,如"Milking Cows"中运用离散化技术,"Transformations"和"Name That Number"通过枚举解决,而"Palindromic Squares"和"Dual Palindromes"进一步强化了枚举法的应用。 1.3节围绕贪心算法...
6 [1.2] 挤牛奶Milking Cows 7 [1.2] 方块转换 Transformations 8 [1.2] 回文平方数 Palindromic Squares 9 [1.2] 双重回文数 Dual Palindromes 10 [1.3] 混合牛奶 Mixing Milk 11 [1.3] 修理牛棚 Barn Repair 12 ...
9. warm_time:保温时间,取值范围为真或假。 10. warm_start:保温启动/停止,取值范围为真或假。 11. switch:开关,取值范围为真或假。 12. work_state:工作状态,取值范围是待机、烹煮、完成、研磨、保温、水落...
When the cows come to the barn for milking, they always come in sequential order from 1 to N. Farmer John, who majored in mathematics in college and loves numbers, often looks for patterns. He has ...
关于农场主题,学生可能需要掌握如cow(奶牛)、horse(马)、sheep(羊)、hen(母鸡)等常见农场动物的英语名称,同时了解与农场相关的活动,比如milking a cow(挤牛奶)、feeding the chickens(喂鸡)等动词...
- **知识点**:二分图染色和动态规划(DP)。 - **二分图染色**:利用两种颜色对图进行着色,确保相邻顶点颜色不同。 - **动态规划**:一种通过将原问题分解成相互重叠的子问题来求解的方法。 #### 1125 ...
1.2.1 "Milking Cows" 可能与数组和排序有关,可能是优化挤牛奶的效率问题。 1.2.3 "Name That Number" 可能是关于数字表示和逻辑推理的问题。 1.2.4 "Palindromic Squares" 和 "Dual Palindromes" 强调了对回文数的...
企业主打产品是全球首款智能配奶机——Milking,这款设备能够一键快速冲奶,自动调整奶粉浓度和温度,并搅拌均匀,确保喂养过程安全便捷。此外,通过扫描奶粉包装条形码,智能配奶机可以匹配云端数据库中的奶粉浓度...
1. **听力理解**:听力部分涵盖了多种句型和场景,如日常活动(如 milking cows, go camping)、比较级(runs faster than)、购物需求(writing paper and an envelope)、季节活动(go climbing in autumn)等。...
随着难度的提升,本章开始引入更复杂的问题,例如“Milking Cows”,这道题目的解决策略需要运用到贪心算法。此外,“Transformations”、“Name That Number”等题目进一步加深了对模拟算法的理解。 ### 四、...
8. **算法优化**:在"Milking Cows"和"Transformations"题目中,优化算法的关键在于减少对已有列表的直接修改,而是创建新列表来存储结果,这样可以使程序执行过程更简单,也更易于理解。 通过理解和应用这些知识点...
5. **Milking Cows (milk2)**: 本题涉及时间调度,有三种主要思路。第一种是离散化,通过排序并遍历,复杂度为O(nlogn+n)。第二种思路是在保持字符串不变的情况下,每次将首位移至末尾,从而从两头同时搜索。第三种...
### Chapter 1 Section 1.2 - Milking Cows (milk2) 本题提出了三种解题思路。一种是离散化,通过对开始时间进行排序,然后遍历整个序列,复杂度为O(nlogn+n)。这种方法的关键是维护一个当前区间`[tmp_begin, tmp_...
Chapter 1 Section 1.2 Milking Cows (milk2) 这道题有三种思想。第一种思想是离散化(其实就是进行了优化的搜索而已),按照开始时间升序排序,然后从左到右扫一遍,复杂度是 O(nlogn+n) 的(排序+扫一遍,用堆、...
1. "Every morning Andy ____________ milking the cow on the farm." 此处应填 "helps out with",表示Andy帮忙挤牛奶。 2. "Jenny, if you ____________, your parents will be worried." 选用 "stay out late",...
#### Milking Cows 这道题考察了学生对动态规划的理解和应用能力。题目背景通常是关于如何最大化奶牛产奶量的问题,可以通过构建状态转移方程来求解最优解。动态规划的核心思想是将一个复杂问题分解成一系列更小的...