记搜60pts求调(WA on #47 #59)
查看原帖
记搜60pts求调(WA on #47 #59)
1259477
qiuxiangyu2010楼主2024/9/14 18:08
#include<bits/stdc++.h>
using namespace std;
int n,s,t,ans=1000000000;
struct A{
	int l,r,h,k;
}a[1010];
bool cmp(A x,A y){
	return x.h>y.h;
}
map <pair <int,int>,int> mp;
void bs(int p,int h,int now,int k,int su){
	if(mp[{p,h}]>0){
		return;
	}
	//cout<<p<<" "<<h<<" "<<su<<"\n";
	if(k==t){
		ans=min(su,ans);
	}
	for(int i=now+1;i<=n;i++){
		if(a[now].l>=a[i].l&&a[now].l<=a[i].r){
			bs(a[now].l,a[i].h,i,a[i].k,su+h-a[i].h+p-a[now].l);
			break;
		}
	}
	for(int i=now+1;i<=n;i++){
		if(a[now].r>=a[i].l&&a[now].r<=a[i].r){
			bs(a[now].r,a[i].h,i,a[i].k,su+h-a[i].h+a[now].r-p);
			break;
		}
	}
	mp[{p,h}]=ans;
};
int main(){
	cin>>n>>s>>t;
	for(int i=1;i<=n;i++){
		cin>>a[i].l>>a[i].r>>a[i].h;
		a[i].k=i;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(a[i].k==s){
			bs(a[i].l,a[i].h,i,s,0);
			if(ans<1000000000){
				cout<<ans;
			}else{
				cout<<-1;
			}
			break;
		}
	}
	return 0;	
}

提交记录

2024/9/14 18:08
加载中...