poj 3616 Milking Time(dp,類似於最長上升子序列)
阿新 • • 發佈:2018-11-02
題意:給奶牛擠奶,共m次可以擠,給出每次開始擠奶的時間st,結束擠奶的時間ed,還有擠奶的量ef,
每次擠完奶要休息r時間,問最大擠奶量.
題解:此題靈感來自於最長上升子序列的做法
#include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <set> #include <map> #include <queue> #include <algorithm> #include <cmath> #define maxn 1005 #define maxz 2005 #define INF 0x3f3f3f3f #define LL long long using namespace std; int zh,m,rest; struct node { int l,r,eff; int len; }cow[maxn]; int dp[maxn]; bool cmp(node a,node b) { return a.l<b.l; } void solve() { memset(dp,0,sizeof(dp)); int ans=0; for(int i=0;i<m;i++) { dp[i]=cow[i].eff; for(int j=0;j<i;j++) { if(cow[i].l-cow[j].r>=rest) { dp[i]=max(dp[i],dp[j]+cow[i].eff); } } ans=max(ans,dp[i]); } cout << ans << endl; } int main() { cin>>zh>>m>>rest; for(int i=0;i<m;i++) { int l,r,eff; cin>>l>>r>>eff; cow[i].l=l; cow[i].r=r; cow[i].eff=eff; cow[i].len=r-l; } sort(cow,cow+m,cmp); solve(); return 0; }