[Baekjoon] 15486λ²: ν΄μ¬ 2
π₯ λ¬Έμ
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;
}