当前位置: 代码迷 >> 综合 >> POJ3616 Milking Time(dp)
  详细解决方案

POJ3616 Milking Time(dp)

热度:16   发布时间:2023-11-08 15:45:34.0

题目:给奶牛挤奶,共m次可以挤,给出每次开始挤奶的时间st,结束挤奶的时间ed,还有挤奶的量ef,每次挤完奶要休息r时间,问最大挤奶量.

分析:最长递增子序列,只是判断条件变了一下。

#include<iostream>
#include<algorithm>
#define maxn 3000010
using namespace std;
typedef long long ll;
struct node{ll sta,ed,sum;
}A[10050];bool cmp(node a,node b){if(a.sta!=b.sta)  return a.sta<b.sta;else if(a.ed!=b.ed) return a.ed<b.ed;
}
ll n,m,r,x,y,z,dp[10050];
int main(){cin>>n>>m>>r;for(int i=0;i<m;i++){cin>>A[i].sta>>A[i].ed>>A[i].sum;A[i].ed+=r;}sort(A,A+m,cmp);for(int i=0;i<m;i++){dp[i]=A[i].sum;for(int j=0;j<i;j++){if(A[i].sta>=A[j].ed){// cout<<A[i].sta<<" "<<A[j].ed<<endl;dp[i]=max(dp[i],dp[j]+A[i].sum);}}}ll ans=0;for(int i=0;i<m;i++)ans=max(ans,dp[i]);cout<<ans<<endl;return 0;
}
  相关解决方案