第十四屆藍橋杯大賽B組 JAVA 蝸牛 (遞歸剪枝)

題目描述:

這天,一只蝸牛來到了二維坐標系的原點。 在 x 軸上長有 n 根竹竿。它們平行于 y 軸,底部縱坐標為 0,橫坐標分別為 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),請計算蝸牛最少需要多少秒才能到達目的地。 輸入格式 輸入共 1 + n 行,第一行為一個正整數 n; 第二行為 n 個正整數
x1, x2, . . . , xn; 后面 n ? 1 行,每行兩個正整數 ai , bi+1。

輸出格式:

輸出共一行,一個浮點數表示答案(四舍五入保留兩位小數)。

樣例輸入:

3
1 10 11
1 1
2 1

樣例輸出:

4.20

提示

蝸牛路線:
(0, 0) → (1, 0) → (1, 1) → (10, 1) → (10, 0) → (11, 0),花費時間為 1+1/0.7+0+1/1.3+1 ≈ 4.20

對于 20% 的數據,保證 n ≤ 15;
對于 100% 的數據,保證 n ≤ 10^5,ai , bi ≤ 10^4,xi ≤ 10^9。

解題思路:

動態規劃問題,典型看解析會,自己解就蒙der

分析問題本質,蝸牛由一個桿子到達另一個桿子,要么從本竿的起點出發或本竿的傳送點出發,那么問題的核心在于確保到由初始原點到達本竿起點,和到達本竿的傳送點必須是最優解

整個示例過程的遞歸圖,以及篩選過程如下:

在這里插入圖片描述
a2是第二個竹竿的起點o->a1->a2o->b1->a2的最終效果一樣,都是到達第二個竹竿起點,所以保留時間最少的那個即可,同理保留到b2時間最少的那個即可,這便是篩選剪枝

篩選遞推公式:

設 x1 表示從起始位置到當前在竹竿底部所需要的最短時間
設 x2 表示從起始位置到當前到達竹竿傳送門起點位置的最短時間
則有
x1 = min(兩根竹竿的距離差 + x1, x2 + 上一個門終點高度 / 1.3)
x2 = min(兩根竹竿的距離差 + x1 + 當前門起點高度 / 0.7, 上一個門終點到當前門所需要的時間 + x2)
最后的目標是遍歷到終點的 x1

剪枝后的效果:
在這里插入圖片描述

代碼:

import java.util.Scanner;
public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt();  // 第一行int x[] = new int[n + 1];  // x軸for(int i = 1; i <= n; i ++) x[i] = sc.nextInt();if(n == 1) {  // 只有一個竹竿System.out.printf("%.2f", (double)x[1]);return;}int door[][] = new int [n][2];  // 存坐標for(int i = 1; i < n; i ++) { door[i][0] = sc.nextInt();door[i][1] = sc.nextInt();}double x1 = x[1], x2 = door[1][0] / 0.7 + x[1];  // 初始化x1,x2for(int i = 2; i <= n; i ++) {  // 開始遍歷int d = x[i] - x[i - 1];double y1 = Math.min(d + x1, x2 + door[i - 1][1] / 1.3);  //先算到達底部if(i == n) {  // 如果已經是最后一個竹竿System.out.printf("%.2f", y1);return;}// 要考慮到達的本竹竿的傳送點位置和由上一個竹竿傳送過來的位置之間關系x2 = Math.min(d + x1 + door[i][0] / 0.7, x2 + (door[i][0] > door[i - 1][1] ? (door[i][0] - door[i - 1][1]) / 0.7 : (door[i - 1][1] - door[i][0]) / 1.3));x1 = y1;}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718542.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全域電商數據集成管理與采集|API接口的采集與管理

如今&#xff0c;全渠道零售已是大勢所趨。企業電商經營的一大現狀就是數據分散各處&#xff0c;比如有來自電商平臺私域數據、品牌一方數據、公開的第三方行業數據與電商平臺C端頁面數據等等。如何集成全域數據日益成為企業數字化基建的難題。 當前電商數據集成的主流方案為人…

【基于Matlab GUI的語音降噪系統設計】

客戶不要了&#xff0c;掛網上吧&#xff0c;有需要自行下載~ 賺點辛苦費 ** 功能實現: ** 1、導入音頻文件/錄入音頻&#xff0c;能實現播放功能。 2、對導入/錄入的音頻信號進行時域和頻域分析&#xff0c;并制圖。 3、可在導入/錄入的音頻信號上加入噪聲&#xff0c;并能夠播…

Apache JMeter 5.6.3 安裝

源碼下載 curl -O https://dlcdn.apache.org//jmeter/source/apache-jmeter-5.6.3_src.zipJMeter 下載 curl -O https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zipjmeter.properties 里 設置中文 windows系統上解壓&#xff0c;雙擊jmeter.bat 啟動 執行參…

【人工智能】DeepLearning學習路線及簡要說明

目錄 神經網絡 1.1 前饋神經網絡(FNN) 結構和工作原理 訓練過程 應用

架構設計方法(4A架構)-應用架構

1、應用架構&#xff08;AA&#xff09;&#xff1a;業務價值與產品之間的橋梁&#xff0c;是企業架構的一個子集 2、應用架構包含“應用系統模塊、應用服務、應用系統集成”3個關鍵要素 3、收集AS-IS應用架構&#xff0c;描繪現狀&#xff0c;并識別改進機會點 4、描述對新系統…

uniapp 安卓YYEVAPlayer MP4禮物播放器原生插件

插件介紹 安卓YYEVAPlayer MP4禮物播放器原生插件&#xff0c;是一個輕量的動畫渲染庫&#xff0c;使用Native Opengles 渲染視頻&#xff0c;為你提供高性能、低開銷的動畫體驗 對比傳統的序列幀的動畫播放方式&#xff0c;具有更高的壓縮率&#xff0c;硬解碼效率更高的優點…

【NR 定位】3GPP NR Positioning 5G定位標準解讀(四)

目錄 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的網絡接口 6.1.1 通用LCS控制平面架構 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 終端協議 6.2.1 LTE定位協議&#xff08;LPP&#x…

TikTok企業認證教程:提升賬號可信度的必備步驟

TikTok企業認證是TikTok平臺用來驗證賬號真實性和權威性的方式。通過企業認證之后&#xff0c;企業能在TikTok上獲得官方標識&#xff0c;可以增強品牌的專業形象&#xff0c;也有利于提升用戶對企業內容的信任度。而且通過TikTok企業認證還可以解鎖高級功能&#xff0c;如數據…

貪心(基礎算法)--- 牛馬耍雜技

耍雜技的牛 農民約翰的N頭奶牛&#xff08;編號為1…N&#xff09;計劃逃跑并加入馬戲團&#xff0c;為此它們決定練習表演雜技。 奶牛們不是非常有創意&#xff0c;只提出了一個雜技表演&#xff1a; 疊羅漢&#xff0c;表演時&#xff0c;奶牛們站在彼此的身上&#xff0c…

@Resource和@Autowired區別

在Java Spring框架中&#xff0c;Resource和Autowired注解都用于依賴注入&#xff0c;但它們之間有一些區別&#xff1a; 來源: Autowired是Spring特定的注解&#xff0c;它通過類型匹配來進行自動裝配。Resource是Java EE&#xff08;javax.annotation.Resource&#xff09;提…

【MATLAB】語音信號識別與處理:T1小波濾波算法去噪及譜相減算法呈現頻譜

1 基本定義 T1小波濾波算法是一種基于小波變換的信號去噪算法。它可以有效地去除信號中的噪聲&#xff0c;并保留信號的主要特征。該算法的主要思想是將信號分解為多個不同尺度的小波系數&#xff0c;然后通過對小波系數進行閾值處理來去除噪聲。 具體來說&#xff0c;T1小波濾…

服務器數據恢復-服務器RAID5上層XFS文件系統分區數據恢復案例

服務器數據恢復環境&#xff1a; MD1200磁盤柜中的磁盤通過RAID卡創建了一組RAID5陣列&#xff0c;分配了一個LUN。在Linux操作系統層面對該LUN進行了分區&#xff0c;劃分sdc1和sdc2兩個分區&#xff0c;通過LVM擴容的方式將sdc1分區加入到了root_lv中&#xff1b;sdc2分區格式…

飛槳(PaddlePaddle)Tensor使用教程

文章目錄 飛槳&#xff08;PaddlePaddle&#xff09;Tensor使用教程1. 安裝飛槳2. 創建Tensor3. Tensor的基本屬性4. Tensor的操作5. Tensor的廣播機制6. Tensor與Numpy數組的轉換7. 結論 飛槳&#xff08;PaddlePaddle&#xff09;Tensor使用教程 1. 安裝飛槳 首先&#xff…

vue2+vxe-table的v3版本:設置vxe-table表格border顏色、單元格高度、斑馬線條紋顏色、表頭背景色和文字樣式

模板與樣式完整代碼 <vxe-table:data"tableData"height"auto"align"center"borderresizablestriperoundrow-id"id":row-config"{ isCurrent: true, isHover: true }":scroll-y"{ enabled: true, gt: 10 }":sho…

SSL證書驗證失敗怎么辦?常見SSL證書驗證失敗原因及解決辦法

網站與其訪問者建立信任的主要方式就是通過簽發SSL證書&#xff0c;因為SSL證書是由受信任的證書頒發機構&#xff08;CA&#xff09;在驗證某個網站真實性和可信任性之后才頒發的。但是&#xff0c;網站部署SSL證書后&#xff0c;偶爾會出現SSL證書驗證失敗而導致錯誤&#xf…

瞄準關基行業!Lockbit卷土重來,銀狐卷出新變種

Lockbit與銀狐木馬是亞信安全2023年重點關注的兩支勒索軟件家族。Lockbit可謂是2023年度最為活躍和猖獗的勒索軟件&#xff0c;受害者上千贖金破億&#xff0c;攻擊技能更是疊加buff不斷升級&#xff0c;在經歷國際聯合執法后在近期卷提重來。銀狐木馬則是2023年的“卷王”&…

跟隨機器人方法總結

文章目錄 基于目標檢測基于視覺跟蹤與自主導航的移動機器人目標跟隨系統[J]基于視覺的履帶車跟隨系統研究[D]基于人體骨架基于二維碼基于視覺的履帶車跟隨系統研究[D]基于目標檢測 基于視覺跟蹤與自主導航的移動機器人目標跟隨系統[J] 針對在移動機器人跟隨目標的過程中目標消…

短劇分銷系統開發,短劇爆火下的商業機遇

這幾年來&#xff0c;短劇市場一直保持著快速發展的步伐&#xff0c;在行業中掀起了了一股風潮。短劇被大眾當做“電子榨菜”&#xff0c;符合了當下人們的碎片化時間。節奏快、劇情緊湊的特點深受大眾的追捧&#xff0c;短劇的市場規模也超過了百億元。 在短劇的爆火下&#…

開發知識點-Ruby

Ruby https://m.runoob.com/ruby/ruby-installation-windows.htmlhttps://rubyinstaller.org/downloads/

題目 1454: 藍橋杯歷屆試題-螞蟻感冒

題目描述: 長100厘米的細長直桿子上有n只螞蟻。它們的頭有的朝左&#xff0c;有的朝右。 每只螞蟻都只能沿著桿子向前爬&#xff0c;速度是1厘米/秒。 當兩只螞蟻碰面時&#xff0c;它們會同時掉頭往相反的方向爬行。 這些螞蟻中&#xff0c;有1只螞蟻感冒了。并且在和其它螞蟻…