POJ3616 Milking Time(dp)

题目:给奶牛挤奶,共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;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/81704695