Back to Dynamic Programming

Implementation

C++

                                #include<bits/stdc++.h>
using namespace std;

#define pii pair<int,int>
#define F first
#define S second
#define ll long long
struct Project{
    int s,e,r;
};

bool comp(Project A,Project B){
    if(A.e!=B.e) return A.e<B.e;
    return A.s<B.s;
}

int main(){
    int n;
    cin>>n;
    Project pro[n];
    for(int i=0;i<n;i++){
        int a,b,c;
        cin>>a>>b>>c;
        pro[i] = {a,b,c};
    }
    sort(pro,pro+n,comp);

    int st[n],en[n];
    for(int i=0;i<n;i++){
        st[i] = pro[i].s;
        en[i] = pro[i].e;

    }

    ll mx = 0;
    ll profit[n] = {0};
    ll maxProfit[n] = {0};
    for(int i=0;i<n;i++){
        auto pos = lower_bound(en,en+n,st[i])-en;
       // cout<<pro[i].s<<" "<<pro[i].e<<" "<<pos<<endl;
        if( pos == 0 ) profit[i] = pro[i].r;
        else profit[i] = pro[i].r+maxProfit[pos-1];

        if(i) maxProfit[i] = max(maxProfit[i-1],profit[i]);
        else maxProfit[0] = profit[0];
    }
    cout<<maxProfit[n-1]<<endl;
}