蜗牛竹竿爬行

简介: 蜗牛竹竿爬行

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


在 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]);
}
相关文章
|
8月前
|
中间件
在 Vuex 中,如何使用中间件?
在 Vuex 中,如何使用中间件?
237 76
|
人工智能
写歌词的技巧和方法基础篇:奠定创作基石,妙笔生词AI智能写歌词软件
写歌词是音乐创作中既具魅力又具挑战的任务。初学者需掌握基础技巧,如明确主题、合理布局结构、简洁生动的语言运用。《妙笔生词智能写歌词软件》提供 AI 智能写词、优化、取名等功能,帮助新手快速提升创作水平,为成功创作打下坚实基础。
|
9月前
|
人工智能 自然语言处理 API
AutoAgent:无需编程!接入DeepSeek用自然语言创建和部署AI智能体!港大开源框架让AI智能体开发变成填空题
香港大学推出的AutoAgent框架通过自然语言交互实现零代码创建AI智能体,支持多模型接入与自动化工作流编排,在GAIA基准测试中表现优异。
1288 16
AutoAgent:无需编程!接入DeepSeek用自然语言创建和部署AI智能体!港大开源框架让AI智能体开发变成填空题
|
11月前
|
机器学习/深度学习 编解码 异构计算
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
377 1
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
|
11月前
|
域名解析 人工智能 弹性计算
基于Knative快速部署DeepSeek-R1
本文以DeepSeek-R1模型、GPU类型为A10卡为例,介绍如何在Knative中快速部署一个DeepSeek-R1推理服务。
|
9月前
|
传感器 人工智能 算法
解决宇树科技的机器人难题,IFR和分离原则或可一用?
法思诺创新专注于解决机器人行业难题,如宇树科技所面临的基层AI能力不足问题。通过最终理想解(IFR)与四大分离原则(时间、条件、空间、系统级别),为机器人智能化发展提供科学策略。文章分析了机器人在工业与生活场景中的应用挑战,并提出按需定制功能以降低成本、提升效率的解决方案。未来,机器人将深度融入各领域,开启人机共存新时代。法思诺还提供TRIZ创新实战工作坊等课程,助力软硬一体化智能创新。
198 0
|
前端开发 关系型数据库 测试技术
django集成pytest进行自动化单元测试实战
在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试框架,Pytest提供了更为丰富和强大的测试功能。本文通过一个实际项目ishareblog介绍django集成pytest进行自动化单元测试实战。
284 3
django集成pytest进行自动化单元测试实战
|
弹性计算 网络安全
快速部署 RAGFlow 社区版
RAGFlow是一个基于深度文档理解的开源RAG(检索增强生成)引擎。当与LLM集成时,它能够提供真实的问答功能,并得到各种复杂格式数据的充分引用的支持。本文介绍如何通过计算巢快速部署 RAGFlow社区版。
快速部署 RAGFlow 社区版
|
缓存 运维 NoSQL
面试分享:Redis在大数据环境下的缓存策略与实践
【4月更文挑战第10天】探索Redis在大数据缓存的关键作用,本文分享面试经验及必备知识点。聚焦Redis数据结构(String、List、Set、Hash、Sorted Set)及其适用场景,缓存策略(LRU、LFU、TTL)与过期机制,集群和数据分片,以及性能优化和运维技巧。通过代码示例深入理解,助你面试成功,构建高效缓存服务。
479 4