ν΄μ¬ μ±κ³΅
μλ΄μμΌλ‘ μΌνκ³ μλ λ°±μ€μ΄λ ν΄μ¬λ₯Ό νλ €κ³ νλ€.
μ€λλΆν° N+1μΌμ§Έ λλ λ ν΄μ¬λ₯Ό νκΈ° μν΄μ, λ¨μ NμΌ λμ μ΅λν λ§μ μλ΄μ νλ €κ³ νλ€.
λ°±μ€μ΄λ λΉμμκ² μ΅λν λ§μ μλ΄μ μ‘μΌλΌκ³ λΆνμ νκ³ , λΉμλ ν루μ νλμ© μλ‘ λ€λ₯Έ μ¬λμ μλ΄μ μ‘μλμλ€.
κ°κ°μ μλ΄μ μλ΄μ μλ£νλλ° κ±Έλ¦¬λ κΈ°κ° Tiμ μλ΄μ νμ λ λ°μ μ μλ κΈμ‘ Piλ‘ μ΄λ£¨μ΄μ Έ μλ€.
N = 7μΈ κ²½μ°μ λ€μκ³Ό κ°μ μλ΄ μΌμ νλ₯Ό 보μ.
1μΌ2μΌ3μΌ4μΌ5μΌ6μΌ7μΌTiPi
3 5 1 1 2 4 2 10 20 10 20 15 40 200 1μΌμ μ‘νμλ μλ΄μ μ΄ 3μΌμ΄ 걸리며, μλ΄νμ λ λ°μ μ μλ κΈμ‘μ 10μ΄λ€. 5μΌμ μ‘νμλ μλ΄μ μ΄ 2μΌμ΄ 걸리며, λ°μ μ μλ κΈμ‘μ 15μ΄λ€.
μλ΄μ νλλ° νμν κΈ°κ°μ 1μΌλ³΄λ€ ν΄ μ μκΈ° λλ¬Έμ, λͺ¨λ μλ΄μ ν μλ μλ€. μλ₯Ό λ€μ΄μ 1μΌμ μλ΄μ νκ² λλ©΄, 2μΌ, 3μΌμ μλ μλ΄μ ν μ μκ² λλ€. 2μΌμ μλ μλ΄μ νκ² λλ©΄, 3, 4, 5, 6μΌμ μ‘νμλ μλ΄μ ν μ μλ€.
λν, N+1μΌμ§Έμλ νμ¬μ μκΈ° λλ¬Έμ, 6, 7μΌμ μλ μλ΄μ ν μ μλ€.
ν΄μ¬ μ μ ν μ μλ μλ΄μ μ΅λ μ΄μ΅μ 1μΌ, 4μΌ, 5μΌμ μλ μλ΄μ νλ κ²μ΄λ©°, μ΄λμ μ΄μ΅μ 10+20+15=45μ΄λ€.
μλ΄μ μ μ ν νμ λ, λ°±μ€μ΄κ° μ»μ μ μλ μ΅λ μμ΅μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ N (1 ≤ N ≤ 15)μ΄ μ£Όμ΄μ§λ€.
λμ§Έ μ€λΆν° Nκ°μ μ€μ Tiμ Piκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄μ μ£Όμ΄μ§λ©°, 1μΌλΆν° NμΌκΉμ§ μμλλ‘ μ£Όμ΄μ§λ€. (1 ≤ Ti ≤ 5, 1 ≤ Pi ≤ 1,000)
μΆλ ₯
첫째 μ€μ λ°±μ€μ΄κ° μ»μ μ μλ μ΅λ μ΄μ΅μ μΆλ ₯νλ€.
μμ μ λ ₯ 1 볡μ¬
7 3 10 5 20 1 10 1 20 2 15 4 40 2 200
μμ μΆλ ₯ 1 볡μ¬
45β
그리λ μλλ©΄ λνΌ λ¬Έμ λΌκ³ μκ°νκ³ μμλλ° μμ (μλ΄) μ€μΌμ€λ§μΌλ‘ νκΈ°μλ μμ νλνλμ κ°μ€μΉ(κΈμ‘)κ° μμΌλ―λ‘ λνΌλ‘ ꡬννλ€.
2μ°¨μ λ°°μ΄μ λ§λ€μ΄ νμ μλ΄ μ 보, μ΄μ λ μ§λ‘ λ§λ€μ΄μ 걸리λ μκ°λ§νΌ κΈμ‘μ λ£μ΄μ£Όκ³ , μμ μ΄ μμμ λ°λΌ λ€λ₯Έ λ°°μ΄ κ°μ λ°κΎΈμ΄ μ£Όμ΄ μ΅λκ°μ ν΅ν΄ λ΅μ ꡬνκ² νλ€. λ§λ‘ μ€λͺ νλ μ΄λ €μ΄κ±° κ°λ€.
μλ₯Όλ€μ΄
3 10
2 20
3 30
4 100μ΄λΌλ μ λ ₯μ΄ λ€μ΄μ€λ©΄
10 | 10 | 10 | ||
20 | 20 | |||
30 | 30 | 30 | ||
100 |
μ΄λ° λͺ¨μμ ν μ΄λΈμ λ§λ€μ΄ μ£Όκ³
νΉμ μλ΄μ΄ μμνλ μκ°μ λ μ§μ κ°μΌλ―λ‘
1 ~ μλ΄μ΄ μμνλ μκ°(D) -> board[ 1~D-1 ][ D ] μ κ°μ΄ 0μ΄λ©΄ μ΄μ μ μνν μ μλ μλ΄μ΄κΈ° λλ¬Έμ μ΄ κ°μ λν΄μ£Όμ΄ λ€λ₯Έ λ°°μ΄μ λ£μ΄μ£Όμλ€.
1μΌμ°¨ μλ΄λΆν° λκΉμ§ μμλλ‘ μ§ννκΈ° λλ¬Έμ μμ°¨μ μΌλ‘ μ μ₯νλ©΄μ ꡬν΄μ£Όλ©΄ λλ€.
#include <iostream>
using namespace std;
int N, board[16][16], va[16], ans[16], an;
//va -> μλ μλ΄ λΉμ© ans -> dp
int main(){
cin>>N;
for(int i=1; i<=N; i++){
int dist, value;
cin>>dist>>value;
if(i+dist-1 > N) continue;
va[i] = value;
ans[i] = value;
for(int j=i; j<i+dist; j++){
board[i][j] = value;
}
}
for(int i=2; i<=N; i++){
for(int j=1; j<i; j++){
if(board[j][i]) continue; // κ°μ΄ μνν μ μλ μλ΄
ans[i] = max(ans[i] ,max(va[i] + ans[j], va[i] + va[j]));
}
}
for(int i=1; i<=N; i++){
an = max(an, ans[i]);
}
cout<<an;
}
λ€νκ³ λ무 μ΄λ ΅κ² νΌκ±°κ°μμ λ€λ₯Έ νμ΄λ₯Ό μ°Ύμ보λ λ€μμλΆν° κ·Έλ₯ κ³μ°νλ©΄ λλ¨λ€..