蜗牛竹竿爬行

简介: 蜗牛竹竿爬行

这天,一只蜗牛来到了二维坐标系的原点。


在 x 轴上长有 n 根竹竿。


它们平行于 y 轴,底部纵坐标为 00,横坐标分别为 x1,x2,…,xn。


竹竿的高度均为无限高,宽度可忽略。


蜗牛想要从原点走到第 n个竹竿的底部也就是坐标 (xn,0)。


它只能在 x 轴上或者竹竿上爬行,在 x 轴上爬行速度为 1 单位每秒;由于受到引力影响,蜗牛在竹竿上向上和向下爬行的速度分别为 0.7 单位每秒和 1.3 单位每秒。


为了快速到达目的地,它施展了魔法,在第 i和 i+1 根竹竿之间建立了传送门(0<i<n),如果蜗牛位于第 i 根竹竿的高度为 ai 的位置 (xi,ai),就可以瞬间到达第 i+1根竹竿的高度为 bi+1 的位置 (xi+1,bi+1),当然也可以选择不瞬移到第 i+1根竹竿。


请计算蜗牛最少需要多少秒才能到达目的地。


输入格式

输入共 1+n 行,第一行为一个正整数 n;


第二行为 n个正整数 x1,x2,…,xn;


后面 n−1行,每行两个正整数 ai,bi+1。


输出格式

输出共一行,一个浮点数表示答案(四舍五入保留两位小数)。

数据范围

对于 20%20% 的数据,保证 n≤15;

对于 100%100% 的数据,保证 1≤n≤10^5,1≤ai,bi≤10^4,1≤x1<x2<…<xn≤10^9。

输入样例:
1. 3
2. 1 10 11
3. 1 1
4. 2 1
输出样例:
4.20
样例解释

蜗牛路线:

(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0)(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0),花费时间为 1+10.7+0+11.3+1≈4.20


思路:到达第i根竹竿时有多种方式,可以是(i-1,0)到(i,0),也可以是(i-1,1)到(i,1)在到(i,0)。有多种选择方式,故是贪心或者是dp算法,但因为每个方式都有可能产生最有解,所以这里是dp算法。

这里吧状态转移方程理清楚:

   for(int i=2;i<=n;i++)
    {
        int d=x[i]-x[i-1];
        f[i][0]=min(f[i-1][0]+d,f[i-1][1]+get(b[i-1],0)+d);
        f[i][1]=min(f[i-1][0]+a[i-1]/0.7,f[i-1][1]+get(b[i-1],a[i-1]));
    }

完整代码:

#include <iostream>
using namespace std;
#include <iomanip>
#include <algorithm>
const int N=100010,inf=2e9;
int a[N],b[N],x[N];
double f[N][2];
 
double get(int x1,int x2){
    if(x1>x2)return (x1-x2)/1.3;
    return (x2-x1)/0.7;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>x[i];
    for(int i=1;i<n;i++)cin>>a[i]>>b[i+1];
    for(int i=0;i<=n;i++)f[i][0]=f[i][1]=inf;
    f[1][0]=x[1];
    for(int i=2;i<=n;i++)
    {
        int d=x[i]-x[i-1];
        f[i][0]=min(f[i-1][0]+d,f[i-1][1]+get(b[i-1],0)+d);
        f[i][1]=min(f[i-1][0]+a[i-1]/0.7,f[i-1][1]+get(b[i-1],a[i-1]));
    }
    cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2)<<min(f[n][1]+b[n]/1.3,f[n][0]);
}
相关文章
|
6月前
|
Windows
【解决方法】浏览器连不上网了?扛狼扛狼扛,进来看~
【解决方法】浏览器连不上网了?扛狼扛狼扛,进来看~
53 2
|
5月前
|
搜索推荐 算法 安全
新站优化如何吸引搜索引擎蜘蛛的爬行?
保证网站文章高质量、规律更新,避免抄袭,以赢得搜索引擎信任。发布精选外链,待内容更新后发出,增加吸引力。新站避免频繁修改内容,确保稳定性,顺利度过搜索引擎的沙盒期。网站优化需耐心细致,持续优化以提升排名和权重。
32 1
|
数据采集 搜索推荐 算法
做谷歌SEO还有用吗?
答案是:肯定的! 在当前数字化的时代,谷歌搜索引擎优化(SEO)的重要性无可否认。 但随着网络营销策略的不断演变,一些人可能会开始质疑,做谷歌SEO到底还有没有用?本文将就这个问题,结合几个关键因素来进行深入探讨。 SEO的作用在于提升在线可见性 无论是个人网站、博客,还是企业网站,谷歌SEO都是提升在线可见性的最有效手段之一。 谷歌搜索引擎是全球最大的搜索引擎,其搜索结果页(SERP)的排名对网站流量有着巨大影响。 通过谷歌SEO,你可以让你的网站内容更容易被你的目标受众找到,从而增加流量,提高转化率。
160 0
做谷歌SEO还有用吗?
|
存储 搜索推荐 定位技术
快速吸收蜘蛛匍匐网站的10个技巧(白狐 公羊seo)
置信大家都晓得百度收录你网站的页面,首先得让百度蜘蛛去爬你的网站,只要让百度蜘蛛喜欢爬你的网站,你的网站收录自然就高了。下面整理10个十分适用的吸收百度蜘蛛匍匐的技巧。
210 0
快速吸收蜘蛛匍匐网站的10个技巧(白狐  公羊seo)
|
XML 搜索推荐 JavaScript
小弟对百度网站排名算法的总结归纳
最近在做深圳人才网的关键字排名,推广写软文的时间很少,所以直接进入主题、
140 0
|
SQL 运维 NoSQL
一则正经的招聘启事
阿里云数据库团队期待你的加入
835 0
一则正经的招聘启事
|
搜索推荐 SEO
网站优化,什么是四处一词?
什么是四处一词? 四处指的是标题、关键词和描述标签、内容、锚文本。看起来是非常容易,实际很多SEOER在操作的时候,还是无从下手,那么今天来给大家讲解下四处一词怎么使用。
145 0
|
JavaScript 前端开发