演算法提高 秘密行動

2021-10-03 01:36:12 字數 1606 閱讀 7563

題目描述

小d接到一項任務,要求他爬到一座n層大廈的頂端與神秘人物會面。這座大廈有乙個神奇的特點,每層的高度都不一樣,同時,小d也擁有一項特殊能力,可以一次向上跳躍一層或兩層,但是這項能力無法連續使用。已知向上1高度消耗的時間為1,跳躍不消耗時間。由於事態緊急,小d想知道他最少需要多少時間到達頂層。

輸入格式:

第一行包含乙個整數n,代表樓的高度。

接下來n行每行乙個整數ai,代表i層的樓層高度(ai <= 100)。

輸出格式:

輸出1行,包含乙個整數,表示所需的最短時間。

樣例輸入:53

5184

樣例輸出:

1資料規模和約定

對20%的資料,n<=10

對40%的資料,n<=100

對60%的資料,n<=5000

對100%的資料,n<=10000

分析:dp(

i,0)

=v[i

]+mi

n[dp

(i−1

,0),

dp(i

−1,1

),dp

(i−1

,2)]

dp(i, 0) = v[i] + min [ dp(i - 1, 0), dp(i - 1, 1), dp(i - 1, 2)]

dp(i,0

)=v[

i]+m

in[d

p(i−

1,0)

,dp(

i−1,

1),d

p(i−

1,2)]dp

(i,1

)=dp

(i−1

,0

)dp(i, 1) = dp(i - 1, 0)

dp(i,1

)=dp

(i−1

,0)dp(

i,2)

=dp(

i−2,

0)

dp(i, 2) = dp(i - 2, 0)

dp(i,2

)=dp

(i−2

,0) an

s=mi

n[dp

(n,0

),dp

(n,1

),dp

(n,2

)]

ans = min[dp(n, 0), dp(n , 1), dp(n, 2)]

ans=mi

n[dp

(n,0

),dp

(n,1

),dp

(n,2

)]**

#include

using

namespace std;

const

int maxn =

10000+5

;int v[maxn]

;int dp[maxn][3

];intmain()

int ans =

min(dp[n][1

],min(dp[n][2

], dp[n][0

]));

cout << ans << endl;

return0;

}

演算法提高 秘密行動

問題描述 小d接到一項任務,要求他爬到一座n層大廈的頂端與神秘人物會面。這座大廈有乙個神奇的特點,每層的高度都不一樣。同時,小d也擁有一項特殊能力,可以一次向上跳躍一層或兩層,但是這項能力無法連續使用。已知向上1高度消耗的時間為1,跳躍不消耗時間。由於事態緊急,小d想知道他最少需要多少時間到達頂層。...

藍橋杯 演算法提高 秘密行動

include include include include using namespace std const int n 10010 int n int a n int f n 2 第二維為0的話表示到達某一層是跳上來的,為1表示爬上來的。一開始做時根本沒想第二維,但是怎麼做也做不對,所以又想...

藍橋杯C 試題 演算法提高 秘密行動

小d接到一項任務,要求他爬到一座n層大廈的頂端與神秘人物會面。這座大廈有乙個神奇的特點,每層的高度都不一樣,同時,小d也擁有一項特殊能力,可以一次向上跳躍一層或兩層,但是這項能力無法連續使用。已知向上1高度消耗的時間為1,跳躍不消耗時間。由於事態緊急,小d想知道他最少需要多少時間到達頂層。第一行包含...