当前位置:网站首页>POJ - 3616 Milking Time(DP+LIS)
POJ - 3616 Milking Time(DP+LIS)
2022-07-07 05:27:00 【WA_自动机】
POJ - 3616 Milking Time
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段时间可以挤奶,每一段时间有开始点strat,结束点end,和这段时间的挤奶量w。 每一次挤奶后,牛都必须休息r时间。问在最合理的挤奶安排下挤到的最大牛奶量是多少?
首先按照结束时间排序区间,然后按照第i个区间选择与否进行动态规划
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
struct Node
{
int l,r,val;
}a[N];
int dp[N];
bool cmp(Node A,Node B)
{
return A.r<B.r;
}
int main()
{
int n,m,r;cin>>n>>m>>r;
for(int i=1;i<=m;i++)
{
cin>>a[i].l>>a[i].r>>a[i].val;
a[i].r+=r;
}
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
dp[i]=a[i].val;
for(int j=1;j<i;j++)
if(a[j].r<=a[i].l)
dp[i]=max(dp[i],dp[j]+a[i].val);
}
int ans=0;
for(int i=1;i<=m;i++)
ans=max(ans,dp[i]);
cout<<ans<<endl;
return 0;
}
边栏推荐
猜你喜欢
解读创客思维与数学课程的实际运用
Train your dataset with swinunet
饥荒云服管理脚本
Practice of combining rook CEPH and rainbow, a cloud native storage solution
解析机器人科技发展观对社会研究论
Avatary's livedriver trial experience
在Rainbond中实现数据库结构自动化升级
Go语言中,函数是一种类型
CCTV is so warm-hearted that it teaches you to write HR's favorite resume hand in hand
JS copy picture to clipboard read clipboard
随机推荐
利用 Helm 在各类 Kubernetes 中安装 Rainbond
XCiT学习笔记
opencv学习笔记五——梯度计算/边缘检测
MES系統,是企業生產的必要選擇
Openvscode cloud ide joins rainbow integrated development system
Qinglong panel -- finishing usable scripts
Avatary's livedriver trial experience
【无标题】
[untitled]
iptables 之 state模块(ftp服务练习)
2-3查找树
Analysis of maker education in innovative education system
Explore creativity in steam art design
Open3d ISS key points
[IELTS speaking] Anna's oral learning records part2
一文了解如何源码编译Rainbond基础组件
[paper reading] icml2020: can autonomous vehicles identify, recover from, and adapt to distribution shifts?
Wang Zijian: is the NFT of Tencent magic core worth buying?
Register of assembly language by Wang Shuang
漏洞复现-easy_tornado