Submission #705776

#TimeUsernameProblemLanguageResultExecution timeMemory
705776starplatSalesman (IOI09_salesman)C++14
19 / 100
3079 ms21348 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define int long long
using namespace std;
int n,u,d,s,dp[500005];
pair<int,pair<int,int>> e[500005];
signed main(){
	cin>>n>>u>>d>>s;
	for (int i=1;i<=n;i++){
		cin>>e[i].f>>e[i].s.f>>e[i].s.s;
	}
	sort(e+1,e+1+n);
	int ans=0;
	for (int i=1;i<=n;i++){
		if (e[i].s.f>=s) dp[i]=e[i].s.s-(e[i].s.f-s)*d;
		else dp[i]=e[i].s.s-(s-e[i].s.f)*u; 
		for (int j=1;j<i;j++){
			if (e[i].s.f>=e[j].s.f) dp[i]=max(dp[i],dp[j]+e[i].s.s-(e[i].s.f-e[j].s.f)*d);
			else dp[i]=max(dp[i],dp[j]+e[i].s.s-(e[j].s.f-e[i].s.f)*u);
		}
		if (e[i].s.f>=s) ans=max(ans,dp[i]-(e[i].s.f-s)*u);
		else ans=max(ans,dp[i]-(s-e[i].s.f)*d);
	}
	cout<<ans<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...