hades

[Baekjoon] 15486๋ฒˆ: ํ‡ด์‚ฌ 2 ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 15486๋ฒˆ: ํ‡ด์‚ฌ 2

hades1 2024. 9. 10. 23:34

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

๋ฐ์ดํ„ฐ๊ฐ€ ์—„์ฒญ ๋งŽ๊ณ , ์ตœ๋Œ€์˜ ์ด์ต์„ ์–ป๋„๋ก ์ƒ๋‹ด์„ ๊ตฌ์„ฑํ•˜๋ฏ€๋กœ, ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋ฐฉํ–ฅ์„ ์žก์•˜๋‹ค.

 

dp[i]์—๋Š” ์ƒ๋‹ด์„ i๋ฒˆ์งธ ๋‚ ๊นŒ์ง€ ํ–ˆ์„ ๋•Œ, ์ตœ๋Œ€ ์ด์ต์„ ์ €์žฅํ•œ๋‹ค.

 

i๋กœ๋ถ€ํ„ฐ ์ƒ๋‹ด์ด ๋๋‚˜๋Š” ๋‚ ์€ i + ์†Œ์š” ๋‚  - 1์ด๊ณ , ์ด๊ฒƒ์„ finish_day๋กœ ์ง€์ •ํ•˜์˜€๋‹ค.

 

i๋ฒˆ์งธ ๋‚ ์— ์ƒ๋‹ด์„ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด, ์ƒ๋‹ด์ด ๋๋‚œ ๋‚  ์–ป๋Š” ์ด๋“์ธ dp[finish_day]๋Š” dp[i-1] + ์ƒ๋‹ด ์ด์ต์ด๋‹ค. ์—ฌ๊ธฐ์„œ dp[i]๊ฐ€ ์•„๋‹Œ dp[i-1]์„ ๋”ํ•ด์•ผ ํ•จ์— ์œ ์˜ํ•œ๋‹ค. dp[i]๋Š” i๋ฒˆ์งธ ๋‚ ๊นŒ์ง€ ์ƒ๋‹ด์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ƒ๋‹ด์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค.

 

๋˜ํ•œ, i๋ฒˆ์งธ ๋‚ ์— ์ƒ๋‹ด์ด ๋๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด, ์ „๋‚ ๊นŒ์ง€์˜ ์ด์ต๊ณผ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” dp[i] = max(dp[i], dp[i - 1]); ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int n, finish_day, result;
vector<pair<int, int>> info(1500001);
vector<int> dp(1500001);

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

	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> info[i].first >> info[i].second;

		dp[i] = max(dp[i], dp[i - 1]);

		finish_day = i + info[i].first - 1;
		if (finish_day > n) {
			continue;
		}
		dp[finish_day] = max(dp[finish_day], dp[i - 1] + info[i].second);

;	}

	for (int i = 1; i <= n; i++) {
		result = max(result, dp[i]);
	}

	cout << result << "\n";
	return 0;
}