七十五分求助....
查看原帖
七十五分求助....
285053
Demon_King楼主2020/11/1 08:34

各位dalao们,到底是哪里出了问题?第四个点错了(输入:

75.6 11.9 27.4 14.98 6

102.0 9.99

220.0 13.29

256.3 14.79

275.0 10.29

277.6 11.29

381.8 10.09

输出:192.33

期望:192.15)

我的策略:把每个站点到每个站点的花费求出来,再用深度搜索搜索出最小花费

#include <bits/stdc++.h>
using namespace std;
double d1,c,d2,p,ss[10][10],minn=99999999.9;
struct GAS{
	double s;
	double price;
}sta[10];
int n;
bool pd[10];
void search(int place,double ans){
	if(place==n+1){
		minn=min(minn,ans);
		return ;
	}
	for(int i=place+1;i<=n+1;i++){
		if(!pd[i]&&ss[place][i]!=0){
			ans+=ss[place][i];
			pd[i]=true;
			search(i,ans);
			ans-=ss[place][i];
			pd[i]=false;
		}
	}
}
int main(){
	cin>>d1>>c>>d2>>p>>n;
	sta[0].s=0; sta[0].price=p;
	sta[n+1].s=d1;
	for(int i=1;i<=n;i++) cin>>sta[i].s>>sta[i].price;
	for(int i=0;i<=n;i++)
		for(int j=1;j<=n+1;j++){
			if((sta[j].s-sta[i].s)/d2<=c)
			ss[i][j]=((sta[j].s-sta[i].s)/d2)*sta[i].price;
			else
			ss[i][j]=0;
		}
	search(0,0);
	if(minn==99999999.9) cout<<"No Solution";
	else printf("%.2f",minn+0.005);
}
2020/11/1 08:34
加载中...