0%

poj3616 Milking Time

题意

m个区间 每个区间的工作有对应效率 开始一个区间的工作则必须完成才可选择下一个,每次完成需要休息r个单位

题解

直接区间排序逐个找即可。。要注意的大概就是最大元素不一定是在最后出现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int dp[1020];
struct inter{
int begin,end,power;
};
inter line[1040];
bool cmp(inter a,inter b){
if(a.begin==b.begin){
return a.end<b.end;
}
return a.begin<b.begin;
}
int main(){
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<m;++i){
scanf("%d%d%d",&line[i].begin,&line[i].end,&line[i].power);
line[i].end+=k;
}
sort(line,line+m,cmp);
for(int i=0;i<m;++i){
dp[i]=line[i].power;
for(int j=0;j<i;++j){
if(line[j].end<=line[i].begin){
dp[i]=max(dp[i],dp[j]+line[i].power);
}
}
}
printf("%d\n",*max_element(dp,dp+m));
return 0;
}