Java實現 藍橋杯 算法提高 祕密行動

試題 算法提高 祕密行動

資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
  小D接到一項任務,要求他爬到一座n層大廈的頂端與神祕人物會面。這座大廈有一個神奇的特點,每層的高度都不一樣,同時,小D也擁有一項特殊能力,可以一次向上跳躍一層或兩層,但是這項能力無法連續使用。已知向上1高度消耗的時間爲1,跳躍不消耗時間。由於事態緊急,小D想知道他最少需要多少時間到達頂層。
輸入格式
  第一行包含一個整數n,代表樓的高度。

接下來n行每行一個整數ai,代表i層的樓層高度(ai <= 100)。
輸出格式
  輸出1行,包含一個整數,表示所需的最短時間。
樣例輸入
5
3
5
1
8
4
樣例輸出
1
數據規模和約定
  對20%的數據,n<=10
  對40%的數據,n<=100
  對60%的數據,n<=5000
  對100%的數據,n<=10000

 

import java.util.Scanner;

public class 祕密行動 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [] num = new int [n];
        for (int i=0;i<n;i++){
            num[i]=sc.nextInt();
        }
        sc.close();

        int  [] []dp = new int [n+1][2];
        //第一個爬上來的是第一層的長度
        dp[1][0]=num[0];
        //跳上來的長度爲0
        for (int i=2;i<=n;i++){
            //dp[i][0]就是爬上來的所以要加長度,跳完爬或者爬完繼續爬
            dp[i][0]=Math.min(dp[i-1][0],dp[i-1][1])+num[i-1];
            //dp[i][1]是跳上來得到,他只能在爬上來的裏面選
            dp[i][1]=Math.min(dp[i-1][0],dp[i-2][0]);
        }
        System.out.println(Math.min(dp[n][0],dp[n][1]));
    }
}

發佈了1265 篇原創文章 · 獲贊 1萬+ · 訪問量 87萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章