#include <iostream>
using namespace std;
const int N=60;
double l,c,k,m;
int n;
double a[N],b[N];
double res=0x3f3f3f3f;
void dfs(int cnt,double pre,double s)
{
if(res<=s)//如果已经超出现在算出的最优解,则返回
return;
if(cnt>n)//已经遍历到最后一个站点,递归结束的跳进
{
res=s;
return;
}
double dis=a[cnt+1]-a[cnt];//两个站点之间的距离
if(pre<c/2||dis>pre*k)//如果剩余的油小于油箱的一般或者剩余油不能到下一站
dfs(cnt+1,c-dis/k,s+(c-pre)*b[cnt]+20);
if(pre*k>=dis)//如果油能到达下一站
dfs(cnt+1,pre-dis/k,s);
}
int main()
{
cin>>l>>c>>k>>m>>n;
for(int i=1;i<=n;i++)
cin>>a[i]>>b[i];
a[n+1]=l;//将最终点设成一站
dfs(1,c-a[1]/k,m);
printf("%.1f",res);
return 0;
}
洛谷 P1180 驾车旅游
最新推荐文章于 2024-07-13 10:27:01 发布