题意:

给你一个地图,问从x1,y1->x2,y2,要走的路最短,问

耗油和速度

题解:

首先把他们转到左下角->右上角

然后只能往上或往下

考虑到可能有小数

所以都乘上他们的公倍数

然后就是dp

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=,M=;
const double inf=1e15;
int n,L,lcm,lim,i,j,k,p,x,y,a[N],b[N],xs,ys,xt,yt,t1,t2,ans1=-,ans2;
double f[][N][M],w[N];
int gcd(int a,int b){return b?gcd(b,a%b):a;}
void up(double&a,double b){if(a>b)a=b;}
int cal(int x)
{
x*=;
return x/lcm+(x%lcm>);
}
int main()
{
scanf("%d%d",&n,&L);
for (int i=;i<=;i++)w[i]=1.0*L/(80.0-0.75*i*i);
for (int i=;i<=n;i++)scanf("%d",&a[i]),a[i]/=;
for (int i=;i<=n;i++)scanf("%d",&b[i]),b[i]/=;
for (int i=;i<=n;i++)x=max(max(a[i],b[i]),x);
for (int i=lcm=;i<=x;i++)lcm=lcm*i/gcd(lcm,i);
scanf("%d%d%d%d%d%d",&xs,&ys,&xt,&yt,&t1,&t2);
lim=t2*lcm/;
if (xs>xt)swap(xs,xt),swap(ys,yt);
if (ys>yt)
{
for (int i=,j=n;i<j;i++,j--)swap(a[i],a[j]);
ys=n-ys+,yt=n-yt+;
}
for (int j=ys;j<=yt;j++)
for (int k=;k<=lim;k++)f[][j][k]=inf;
f[][ys][]=;
for (int i=xs;i<=xt;i++,p^=)
{
for (int j=ys;j<=yt;j++)
for (int k=;k<=lim;k++)f[p^][j][k]=inf;
for (int j=ys;j<=yt;j++)
for (int k=;k<=lim;k++)
if (f[p][j][k]<inf)
{
if (j<yt)
for (int x=b[i];x;x--)
{
y=k+lcm/x*L;
if (y<=lim)up(f[p][j+][y],f[p][j][k]+w[x]);
}
if (i<xt)
for (int x=a[j];x;x--)
{
y=k+lcm/x*L;
if (y<=lim)up(f[p^][j][y],f[p][j][k]+w[x]);
}
}
}
for (int k=;k<=lim;k++)
if (k*>=t1*lcm&&f[p^][yt][k]<inf)
{
if (ans1<)ans1=k;
if (!ans2||f[p^][yt][k]+1e-<f[p^][yt][ans2])ans2=k;
}
if (ans1<)
{
puts("No");
return ;
}
printf("%d %.2f\n%d %.2f",cal(ans1),f[p^][yt][ans1],
cal(ans2),f[p^][yt][ans2]);
return ;
}

bzoj1075的更多相关文章

  1. BZOJ1075 : [SCOI2007]最优驾车drive

    设$f[i][j][k]$为到达$(i,j)$,用时为$\frac{k}{5lcm}$小时的最低耗油量,然后DP即可. #include<cstdio> const int N=12,M= ...

  2. BZOJ第1页养成计划

    嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1000   BZOJ1001   BZOJ1002   BZOJ1003   BZOJ1004   BZOJ1005   ...

随机推荐

  1. Python isdigit() isalnum()

    Python isdigit() 方法检测字符串是否只由数字组成. 返回值 如果字符串只包含数字则返回 True 否则返回 False. >>> choice = input(&qu ...

  2. ViewPager添加小圆点

    ViewPager添加小圆点很简单,但是如果是网络图片可能就不太好做了,所以我这里给出一种方法,当然你也可以用其他的 1.主界面xml <?xml version="1.0" ...

  3. android qq开合表

    qq悬浮列表功能暂未实现 main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr ...

  4. drawable转mitmap 以及图片base64编码

    static Bitmap drawableToBitmap(Drawable drawable) // drawable 转换成bitmap { int width = drawable.getIn ...

  5. Windows上的巧克力味Chocolatey详解

    Chocolatey是什么?很简单,Chocolatey就是Windows系统的yum或apt-get. 一.Chocolatey介绍 Chocolatey是一款专为Windows系统开发的.基于Nu ...

  6. 使用JavaScript修改浏览器URL地址栏的实现代码

    现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起来,当你在浏览器点击后退按钮的时候,你可以冲浏览历史上获得回退的信息,这听起来并不 ...

  7. 一个Spark job的生命历程

    一个job的生命历程 dagScheduler.runJob //(1) --> submitJob ( eventProcessLoop.post(JobSubmitted,***) //(2 ...

  8. Thread的六中状态

    线程共有6种状态:在某一时刻只能是这6种状态之一.这些状态由Thread.State这个枚举类型表示,并且可以通过getState()方法获得当前线程具体的状态类型. NEW:至今尚未启动的线程的状态 ...

  9. 20155307 2016-2017-2 《Java程序设计》第8周学习总结

    20155307 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 日志API:使用日志的起点是Logger类,要取得Logger类,必须使用Logger的静态 ...

  10. OpenResty api 网关

    1,Orange网关 Orange是一个基于OpenResty的API网关.除Nginx的基本功能外,它还可用于API监控.访问控制(鉴权.WAF).流量筛选.访问限速.AB测试.动态分流等.它有以下 ...