%%求条,#9wa
查看原帖
%%求条,#9wa
1131953
dc_yangpengming楼主2025/7/26 19:06
#include<iostream>
#include<cmath>
#define int long long
using namespace std;
const int O=55;
int n,m,ans=0x3ffffffffffff,vis[O],p[O],w[O];
void dfs(int s,int l,int re,int N){
	vis[s]=1;
	if(re>=ans) return ;
	if(N==n){
		ans=min(ans,re);
		return ;
	}
	if(s==m){
		if(s<n) dfs(s+1,l+p[s+1]-p[s],re+w[s+1]*(l+p[s+1]-p[s]),N+1);
		if(s>1) dfs(s-1,l+p[s]-p[s-1],re+w[s-1]*(l+p[s]-p[s-1]),N+1);
	}
	if(s>m){
		if(s<n) dfs(s+1,l+p[s+1]-p[s],re+w[s+1]*(l+p[s+1]-p[s]),N+1);
		for(int i=m;i>=1;i--){
			if(!vis[i]){
				dfs(i,l+p[s]-p[i],re+w[i]*(l+p[s]-p[i]),N+1);
			}
		}
	}
	if(s<m){
		if(s>1) dfs(s-1,l+p[s]-p[s-1],re+w[s-1]*(l+p[s]-p[s-1]),N+1);
		for(int i=m;i<=n;i++){
			if(!vis[i]){
				dfs(i,l+p[i]-p[s],re+w[i]*(l+p[i]-p[s]),N+1);
			}
		}
	}
	vis[s]=0;
	return ;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>p[i]>>w[i];
	}
	dfs(m,0,0,1);
	cout<<ans;
	return 0;
}
2025/7/26 19:06
加载中...