log

[BOJ 22871] ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ (large) ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BOJ 22871] ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ (large)

sun_young 2024. 3. 17. 01:20

๐Ÿ“ƒ ๋ฌธ์ œ

https://www.acmicpc.net/problem/22871

 

22871๋ฒˆ: ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ (large)

$N$๊ฐœ์˜ ๋Œ์ด ์ผ๋ ฌ๋กœ ๋‚˜์—ด ๋˜์–ด ์žˆ๋‹ค. $N$๊ฐœ์˜ ๋Œ์—๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ˆ˜ $A_{1} A_{2} ... A_{i} ... A_{N}$๋กœ ๋ถ€์—ฌ๋˜์–ด ์žˆ๋‹ค. ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋Œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋Œ๋กœ ๊ฑด๋„ˆ๊ฐ€๋ ค๊ณ 

www.acmicpc.net


๐Ÿ’ป ์ฝ”๋“œ

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;

int N;
long long bridge[1000001];
long long dp[1000001] = { 0 };

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	cin >> N;

	for (int i = 0; i < N; i++) cin >> bridge[i];

	for (int i = 1; i < N; i++) dp[i] = 987654321; // ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ํฐ ์ˆ˜๋กœ ์ดˆ๊ธฐํ™”

	for (int i = 1; i < N; i++) {
		for (int j = 0; j < i; j++) {
			dp[i] = min(dp[i], max(dp[j], (i - j) * (1 + abs(bridge[j] - bridge[i]))));
		}
	}
	cout << dp[N - 1] << '\n';
}

 

๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์‹œ๊ฐ„


๐Ÿ’ก ํ’€์ด

- ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ €์žฅ

 

- ์ ํ™”์‹

  • max(dp[j], (i - j) * (1 + abs(bridge[j] - bridge[i]))));
    • dp[j] : j๊นŒ์ง€ ์ด๋™ํ•˜๋Š”๋ฐ ๋ฐœ์ƒํ•œ ํž˜
    • (i - j) * (1 + abs(bridge[j] - bridge[i]))) : i๋ฒˆ์งธ ๋Œ๋กœ ์ด๋™ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํž˜ ๊ณ„์‚ฐ
    • max ํ•จ์ˆ˜ ์‚ฌ์šฉ ์ด์œ  : ๋ฌธ์ œ์—์„œ "๋Œ์„ ํ•œ๋ฒˆ ๊ฑด๋„ˆ๊ฐˆ ๋•Œ๋งˆ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋Š” ํž˜์€ ์ตœ๋Œ€ K์ด๋‹ค." → ํž˜์˜ ์ƒํ•œ์„  ๊ตฌํ•˜๊ธฐ
  • min(dp[j], ~)
    • min ํ•จ์ˆ˜ ์‚ฌ์šฉ ์ด์œ  : K์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค

 

- for๋ฌธ ์ด์šฉํ•ด์„œ ๋ฐ˜๋ณต

 

'Algorithm > Baekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ 1863] ์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด๊ฑฐ  (1) 2024.04.07
[BOJ 2110] ๊ณต์œ ๊ธฐ ์„ค์น˜  (0) 2024.03.14