π£ λ¬Έμ μ΄ν΄
κ° μ€ν°μ»€μλ μ μκ° λΆμ¬λμ΄ μμΌλ©°, ν μ€ν°μ»€λ₯Ό μ ννλ©΄ κ·Έ μνμ’μ°μ μ€ν°μ»€λ μ νν μ μλ€λ μ‘°κ±΄μ΄ μ£Όμ΄μ Έμλ€.
2ν nμ΄μ μ€ν°μ»€ μ€μμ 쑰건μ λ§μ‘±νλ©° μ ννμ λ, μ»μ μ μλ μ΅λμ μ μλ₯Ό ꡬνλ λ¬Έμ μ΄λ€.
ν μ€ν°μ»€λ₯Ό μ νν¨μ λ°λΌ λ€μ μ νμ§κ° κ²°μ λ κ²λ§ κ°μ 그리λ(Greedy algorithm) λ°©μμΌ κ² κ°μΌλ,
κ·Έλ κ² ν΄μλ μ§μ§ μ΅λκ°μ μ°Ύμ μκ° μλ€.
λͺ¨λ κ°λ₯ν μ νμ§μ λν΄ κ°κ° ꡬν μ μλ μ΅λκ°μ μ°ΎμμΌνλ€κ³ νλ¨νλ€.
λμ κ³νλ²(Dynamic Programming) λ°©μμ μ¬μ©νλ€.
π νμ΄ κ³Όμ
첫 λ²μ§Έ ν μ€νΈ μΌμ΄μ€μ κ²½μ°μ΄λ€.
<inpArr>
50 | 10 | 100 | 20 | 40 |
30 | 50 | 70 | 10 | 60 |
μΆλ°μ μ 50 λλ 30μ΄λ€.
50μ μ ννλ κ²½μ°, μ°μΈ‘μ 10κ³Ό μλμ 30μ μ νν μ μλ€.
κ·Έλ λ€λ©΄ λ€μμΌλ‘ λκ°μ μλμ 50, 70, 10, 60, .... μ μ νν μ μλ€. (30μΌλ‘ μμνλ κ²½μ°λ κ²½μ° λκ°μ μλ₯Ό 체ν¬)
κ·Έλ¬λ, λκ°μ μλ 첫 λ²μ§Έμ λ λ²μ§Έλ§ λΉκ΅νλ©΄ λλ€.
λκ°μ μλ μΈ λ²μ§ΈμΈ 10μ 보면,
50 + 10 λ³΄λ€ 50 + 50 + 100 + 10μ΄ ν¨μ¬ ν¬κΈ° λλ¬Έμ μ μΈν΄λ λλ κ²μ΄λ€.
μ΄λ° κ·μΉμΌλ‘ dp λ°°μ΄μ μ±μ°λ©΄ μλμ κ°λ€.
<dpArr>
50 | 40 | 200 | 140 | 250 |
30 | 100 | 120 | 210 | 260 |
μ’μΈ‘μμ μ°μΈ‘μΌλ‘ μ΄λνλ©΄μ νμ¬ μ€ν°μ»€λ₯Ό κΈ°μ€μΌλ‘ μ»μ μ μλ μ΅λ μ μκ° κΈ°λ‘μ΄ λλ€.
μ΄ μμ μμλ 260μ΄ μ΅λμ μ΄ λλ€.
μμ± μΈμ΄: C++
#include <cstdio>
#include <algorithm>
int main(){
int tcNum = 0, nNum = 0, answer = 0;
int inpArr[2][100010] = {0,};
int dpArr[2][100010] = {0,};
scanf("%d", &tcNum);
for (int temp = 0; temp < tcNum; ++temp) {
scanf("%d", &nNum);
//######## μ
λ ₯ λ°μ΄ν° inpArrμ λ°μμ€κΈ° ########//
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < nNum; ++j) {
scanf("%d", &inpArr[i][j]);
}
}
// 맨 μ’μΈ‘ 0μ΄μ κ·Έλλ‘ κ°μ Έμ¨λ€.
dpArr[0][0] = inpArr[0][0];
dpArr[1][0] = inpArr[1][0];
// 1μ΄μ μ§μ μ±μμ€λ€.
// (0νμ νμ¬μ λκ°μ μλλ₯Ό ν©, 1νμ νμ¬μ λκ°μ μλ₯Ό ν©)
dpArr[0][1] = inpArr[0][1] + inpArr[1][0];
dpArr[1][1] = inpArr[1][1] + inpArr[0][0];
for (int j = 2; j < nNum; ++j) {
dpArr[0][j] = inpArr[0][j] + std::max(dpArr[1][j-2], dpArr[1][j-1]);
dpArr[1][j] = inpArr[1][j] + std::max(dpArr[0][j-2], dpArr[0][j-1]);
// μ΄ κ°μ μ±μΈ λλ§λ€, κΈ°μ‘΄ μ΅λκ°λ³΄λ€ ν° κ°μ μ°ΎμΌλ©΄ λ체νλ€.
answer = answer < dpArr[0][j] ? dpArr[0][j] : answer;
answer = answer < dpArr[1][j] ? dpArr[1][j] : answer;
}
printf("%d\n", answer);
answer = 0;
}
return 0;
}
π λ°°μ΄ μ
μ²μ μλν λ, 벑ν°λ₯Ό μ¬μ©νλ©΄μ 2μ°¨μ λ°°μ΄μ μ μΈνλ €κ³ νλ€λ³΄λ, νμ μ΄μμΌλ‘ μμ€κ° κΈΈμ΄μ§λ λΆλΆλ€μ΄ μμλ€.
STL μ¬μ©μ λ μ΅μν΄μ§λ €κ³ μΌλΆλ¬ μλν΄λ΄€λλ°, μΌλ° λ°°μ΄μ μ¬μ©νλ κ²μ΄ ν¨μ¬ μμ°μ μ΄μλ€.
μκ°ν νμ΄λ₯Ό μμ€λ‘ ꡬνν λ, μ΄λ€ μλ£νμ μΈ κ²μΈκ°λ νλͺ νκ² μ νν΄μΌκ² λ€λ μκ°μ΄ λ€μλ€.