π‘ Info
λ΄μ©
μλ΄μμΌλ‘ μΌνκ³ μλ λ°±μ€μ΄λ ν΄μ¬λ₯Ό νλ €κ³ νλ€.
μ€λλΆν° N+1μΌμ§Έ λλ λ ν΄μ¬λ₯Ό νκΈ° μν΄μ, λ¨μ NμΌ λμ μ΅λν λ§μ μλ΄μ νλ €κ³ νλ€.
λ°±μ€μ΄λ λΉμμκ² μ΅λν λ§μ μλ΄μ μ‘μΌλΌκ³ λΆνμ νκ³ , λΉμλ ν루μ νλμ© μλ‘ λ€λ₯Έ μ¬λμ μλ΄μ μ‘μλμλ€.
κ°κ°μ μλ΄μ μλ΄μ μλ£νλλ° κ±Έλ¦¬λ κΈ°κ° Tiμ μλ΄μ νμ λ λ°μ μ μλ κΈμ‘ Piλ‘ μ΄λ£¨μ΄μ Έ μλ€.
N = 7μΈ κ²½μ°μ λ€μκ³Ό κ°μ μλ΄ μΌμ νλ₯Ό 보μ.
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μ΄λ€.
μλ΄μ μ μ ν νμ λ, λ°±μ€μ΄κ° μ»μ μ μλ μ΅λ μμ΅μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π₯μ λ ₯ 쑰건
//μ1
7
3 10
5 20
1 10
1 20
2 15
4 40
2 200
//μ2
10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
//μ3
10
5 10
5 9
5 8
5 7
5 6
5 10
5 9
5 8
5 7
5 6
//μ4
10
5 50
4 40
3 30
2 20
1 10
1 10
2 20
3 30
4 40
5 50
π€μΆλ ₯ 쑰건
//μ1
45
//μ2
55
//μ3
20
//μ4
90
μ€μ νμ΄ μκ° : 17λΆ
μ λ ₯
κ³μ°
μΆλ ₯
import java.util.*;
public class Main {
static int N;
static int[] T;
static int[] P;
static int[] d;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
for(int i=0; i<N; i++){
T[i] = sc.nextInt();
P[i] = sc.nextInt();
}
d = new int[16];
int maxCon = 0; //μ΅λ μμ΅
for(int i = N; i>0; i--){
int time = T[i]; //μλ΄ μΌμ ν μ€ μκ°μ ν΄λΉ
if(time<=N){ //μλ΄μ΄ λλ κ²½μ°
d[i] = Math.max(P[i] + d[time], maxCon);
} else {
d[i] = maxCon;
}
}
System.out.println(maxCon);
}
}
Exception in thread "main" java.lang.NullPointerException
//before
N = sc.nextInt();
for(int i=0; i<N; i++){
T[i] = sc.nextInt();
P[i] = sc.nextInt();
}
//after
N = sc.nextInt();
T = new int[N];
P = new int[N];
for(int i=0; i<N; i++){
T[i] = sc.nextInt();
P[i] = sc.nextInt();
}
//before
d = new int[16];
int maxCon = 0;
for(int i = N; i>0; i--){
int time = T[i];
if(time<=N){
d[i] = Math.max(P[i] + d[time], maxCon);
} else {
d[i] = maxCon;
}
}
//after
static int maxCon;
d = new int[N + 1]; //d ν¬κΈ°λ₯Ό N+1λ‘ λ³κ²½
for(int i = N-1; i>=0; i--){
int time = T[i] + i; // -> μ΄λ κ² time λ³μλ‘ T[i] + iλ₯Ό μ μΈν΄μ€μΌ ν¨!(μκ·Έλ¬λ©΄ μνλ κ° μλμ΄)
if(time<=N){
d[i] = Math.max((P[i] + d[time]), maxCon);
maxCon = d[i];
} else {
d[i] = maxCon;
}
}
μ€μ νμ΄ μκ° : 35λΆ(μ€μ νμ΄ μκ° ν¬ν¨)
μ λ ₯(μ μλ³μλ‘ μ μΈ)
κ³μ°
μΆλ ₯
import java.util.*;
public class Main {
static int N;
static int[] T;
static int[] P;
static int[] d;
static int maxCon;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
T = new int[N];
P = new int[N];
for(int i=0; i<N; i++){
T[i] = sc.nextInt();
P[i] = sc.nextInt();
}
d = new int[N + 1];
for(int i = N-1; i>=0; i--){
int time = T[i] + i;
if(time<=N){
d[i] = Math.max((P[i] + d[time]), maxCon);
maxCon = d[i];
} else {
d[i] = maxCon;
}
}
System.out.println(maxCon);
}
}