1 solutions

  • 0
    @ 2025-11-27 11:59:57

    C++ :

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    
    struct node{
    	int l,r,h,id;
    }a[1010];
    int dp[1010][2];
    bool cmp(node x,node y){
    	if(x.h==y.h)return x.l<y.l;
    	return x.h>y.h;
    }
    signed main(){	
    	ios::sync_with_stdio(false);
    	cin.tie(0);cout.tie(0);
    	int n,os,ot;
    	cin>>n>>os>>ot;
    	for(int i=1;i<=n;i++)
    		cin>>a[i].l>>a[i].r>>a[i].h,a[i].id=i,dp[i][0]=dp[i][1]=1e18;
    	sort(a+1,a+n+1,cmp);
    	int s,t;
    	for(int i=1;i<=n;i++){
    		if(a[i].id==os)s=i;
    		if(a[i].id==ot)t=i;
    	}
    	dp[s][0]=0,dp[s][1]=a[s].r-a[s].l;
    	int ans=1e18;
    	for(int i=s;i<=t;i++){
    		for(int j=i+1;j<=t;j++){
    			if(a[i].l>=a[j].l&&a[i].l<=a[j].r&&a[i].h>a[j].h){
    				int val=a[i].h-a[j].h;
    				if(j==t)ans=min(ans,dp[i][0]+val);
    				dp[j][0]=min(dp[j][0],dp[i][0]+a[i].l-a[j].l+val);
    				dp[j][1]=min(dp[j][1],dp[i][0]+a[j].r-a[i].l+val);
    				break;
    			}
    		}
    		for(int j=i+1;j<=t;j++){
    			if(a[i].r>=a[j].l&&a[i].r<=a[j].r&&a[i].h>a[j].h){
    				int val=a[i].h-a[j].h;
    				if(j==t)ans=min(ans,dp[i][1]+val);
    				dp[j][0]=min(dp[j][0],dp[i][1]+a[i].r-a[j].l+val);
    				dp[j][1]=min(dp[j][1],dp[i][1]+a[j].r-a[i].r+val);
    				break;
    			}
    		}
    	}
    	if(ans==1e18)cout<<"-1\n";
    	else cout<<ans<<'\n';
    	return 0;
    }  
    
    

    Information

    ID
    148
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By