κ³λ¨ μ€λ₯΄κΈ° κ²μμ κ³λ¨ μλ μμμ λΆν° κ³λ¨ κΌλκΈ°μ μμΉν λμ°©μ κΉμ§ κ°λ κ²μμ΄λ€. <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ κ°κ°μ κ³λ¨μλ μΌμ ν μ μκ° μ°μ¬ μλλ° κ³λ¨μ λ°μΌλ©΄ κ·Έ κ³λ¨μ μ°μ¬ μλ μ μλ₯Ό μ»κ² λλ€.
μλ₯Ό λ€μ΄ <κ·Έλ¦Ό 2>μ κ°μ΄ μμμ μμλΆν° 첫 λ²μ§Έ, λ λ²μ§Έ, λ€ λ²μ§Έ, μ¬μ― λ²μ§Έ κ³λ¨μ λ°μ λμ°©μ μ λλ¬νλ©΄ μ΄ μ μλ 10 + 20 + 25 + 20 = 75μ μ΄ λλ€.
κ³λ¨ μ€λ₯΄λ λ°λ λ€μκ³Ό κ°μ κ·μΉμ΄ μλ€.
- κ³λ¨μ ν λ²μ ν κ³λ¨μ© λλ λ κ³λ¨μ© μ€λ₯Ό μ μλ€. μ¦, ν κ³λ¨μ λ°μΌλ©΄μ μ΄μ΄μ λ€μ κ³λ¨μ΄λ, λ€μ λ€μ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€.
- μ°μλ μΈ κ°μ κ³λ¨μ λͺ¨λ λ°μμλ μ λλ€. λ¨, μμμ μ κ³λ¨μ ν¬ν¨λμ§ μλλ€.
- λ§μ§λ§ λμ°© κ³λ¨μ λ°λμ λ°μμΌ νλ€.
λ°λΌμ 첫 λ²μ§Έ κ³λ¨μ λ°κ³ μ΄μ΄ λ λ²μ§Έ κ³λ¨μ΄λ, μΈ λ²μ§Έ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€. νμ§λ§, 첫 λ²μ§Έ κ³λ¨μ λ°κ³ μ΄μ΄ λ€ λ²μ§Έ κ³λ¨μΌλ‘ μ¬λΌκ°κ±°λ, 첫 λ²μ§Έ, λ λ²μ§Έ, μΈ λ²μ§Έ κ³λ¨μ μ°μν΄μ λͺ¨λ λ°μ μλ μλ€.
κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§ λ μ΄ κ²μμμ μ»μ μ μλ μ΄ μ μμ μ΅λκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯μ 첫째 μ€μ κ³λ¨μ κ°μκ° μ£Όμ΄μ§λ€.
λμ§Έ μ€λΆν° ν μ€μ νλμ© μ μΌ μλμ λμΈ κ³λ¨λΆν° μμλλ‘ κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§λ€. κ³λ¨μ κ°μλ 300μ΄νμ μμ°μμ΄κ³ , κ³λ¨μ μ°μ¬ μλ μ μλ 10,000μ΄νμ μμ°μμ΄λ€.
첫째 μ€μ κ³λ¨ μ€λ₯΄κΈ° κ²μμμ μ»μ μ μλ μ΄ μ μμ μ΅λκ°μ μΆλ ₯νλ€.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int arr[100002] = {0};
for(int i=1;i<=n;i++) cin >> arr[i];
int dp[100002];
dp[1] = arr[1];
dp[2] = arr[1] + arr[2];
dp[3] = max(arr[1] + arr[3], arr[2] + arr[3]);
for(int i=4;i<=n;i++) {
dp[i] = max(dp[i-2] + arr[i], dp[i-3] + arr[i-1] + arr[i]);
}
cout << dp[n];
return 0;
}
DP
λ¬Έμ μ΄λ€. DP λ¬Έμ λ μ΄μ μ ꡬν κ°λ€μ νμ©νμ¬ νμ¬μ κ°μ ꡬν΄λκ°λ©° μΌλ°νλ₯Ό νλ κ³Όμ μ΄λ€.
λ°°μ΄ dp
λ κ° κ³λ¨ i μμμ μ΅λκ°
μ μ μ₯νκ³ , λ°°μ΄ arr
λ κ° κ³λ¨μ μ μλ₯Ό μ μ₯νλ€.
μμ μ κ°μ΄ 6κ°μ κ³λ¨ κ°κ°μ μ μκ° 10, 20, 15, 25, 10, 20
μ΄λΌκ³ κ°μ νμ.
- 첫 λ²μ§Έ κ³λ¨μμμ μ΅λκ°μ μλͺ
νκ² 10μ΄λ€.
dp[1] = arr[1] = 10;
- λ λ²μ§Έ κ³λ¨μμμ μ΅λκ°μ
arr[1] + arr[2]
μ΄λ€. - μΈ λ²μ§Έ κ³λ¨μμμ μ΅λκ°μ, λ λ²μ§Έ κ³λ¨μ λ°μ κ²½μ°μ κ·Έλ μ§ μμ κ²½μ°λ‘ λλλ€.
-
λ λ²μ§Έ κ³λ¨μ λ°μ κ²½μ°, μ°μ μΈ κ³λ¨μ λ°λ κ²μ΄ μλκΈ° λλ¬Έμ,
arr[2] + arr[3]
μ΄λ€. -
λ λ²μ§Έ κ³λ¨μ λ°μ§ μμ κ²½μ°, 첫 λ²μ§Έ κ³λ¨μ λ°μΌλ―λ‘
arr[1] + arr[3]
μ΄λ€.λ°λΌμ, λ μ€ μ΅λκ°μ κ³ λ₯΄λ©΄ λλ€.
max(arr[2] + arr[3], arr[1] + arr[3])
- λ€ λ²μ§Έ κ³λ¨ λΆν°λ μΌλ°νλ μ νμμ μ¬μ©ν μ μλ€.
-
ν΄λΉ κ³λ¨μ κΈ°μ€μΌλ‘, λ°λ‘ μ κ³λ¨(i-1)μ λ°μ κ²½μ°μ, μ μ κ³λ¨μ λ°μ μ μλ€. (μ°μ μΈ κ³λ¨μ λ°μ§ λͺ»νλ€λ 쑰건)
- μ΄ κ²½μ°, ν΄λΉ κ³λ¨μμμ μ΅λκ°μ μ΄ μ κ³λ¨μ μ μμ, μΈ λ²μ§Έ μ μ κ³λ¨μμμ μ΅λκ°μ λν΄μ£Όμ΄μΌνλ€.
dp[i] = arr[i-1] + dp[i-3] + arr[i
- μ΄ κ²½μ°, ν΄λΉ κ³λ¨μμμ μ΅λκ°μ μ΄ μ κ³λ¨μ μ μμ, μΈ λ²μ§Έ μ μ κ³λ¨μμμ μ΅λκ°μ λν΄μ£Όμ΄μΌνλ€.
-
ν΄λΉ κ³λ¨μ κΈ°μ€μΌλ‘, λ°λ‘ μ κ³λ¨(i-1)μ λ°μ§ μμ κ²½μ°μ, μ μ κ³λ¨μ λ°μμΌνλ€.