各位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);
}