題目描述
小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想知道他最少需要多少時間到達頂層。第一行包含...