❀ 題目傳送門 ❀

https://atcoder.jp/contests/dp/tasks/dp_a

❀ 解題小技巧 ❀

基本上我用 Bottom-up 去推它,轉移式也不難想到,算是基礎題~ 
dp 為跳到第n個最省力之方法,我們只要比較從上一個跳到現在比較省力,還是從上上個比較省力即可。

❀ 參考程式碼 ❀

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
rock_num = int(input())

rocks = list(map(int, input().split()))

dp = [0 for i in range(rock_num)]

dp[1] = abs(rocks[1] - rocks[0])

for i in range(2, rock_num):

dp[i] = min(

dp[i-2] + abs(rocks[i]-rocks[i-2]),

dp[i-1] + abs(rocks[i]-rocks[i-1])

)

print(dp[rock_num - 1])

Cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;

#define burst ios::sync_with_stdio(0); cin.tie(0);

int main(){
burst
int N;
cin >> N;
int stone[100005], dp[100005];
memset(dp, 0x3f, sizeof(dp));
for(int i = 1; i <= N; i++){
cin >> stone[i];
}
dp[1] = 0; dp[2] = abs(stone[1] - stone[2]);
for(int i = 3; i <= N; i++){
dp[i] = min(dp[i - 1] + abs(stone[i] - stone[i - 1]), dp[i - 2] + abs(stone[i] - stone[i - 2]));
}
cout << dp[N];
return 0;
}

❀ 心得幹話區 ❀

ㄟ對,好久沒用 python 寫了,差點就忘記我有點 python 的技能。 
然而應該只有這題用 py ,因為心血來潮。
之後…說不定會更新 c++ 寫法(架構應該差不多也不用太期待)但真的有人在期待嗎
4/19 我真的更了,真神奇