β¨ DP
https://www.acmicpc.net/problem/17485
17485λ²: μ§μ°μ λ¬ μ¬ν (Large)
첫μ€μ μ§κ΅¬μ λ¬ μ¬μ΄ 곡κ°μ λνλ΄λ νλ ¬μ ν¬κΈ°λ₯Ό λνλ΄λ N, M (2 β€ N, M β€ 1000)μ΄ μ£Όμ΄μ§λ€. λ€μ Nμ€ λμ κ° νλ ¬μ μμ κ°μ΄ μ£Όμ΄μ§λ€. κ° νλ ¬μ μμκ°μ 100 μ΄νμ μμ°μμ΄λ€.
www.acmicpc.net
π κ³ λ €ν΄μΌν μ
- μΌμͺ½ λκ°μ , μλ, μ€λ₯Έμͺ½ λκ°μ 3κ°μ§ λ°©ν₯μΌλ‘ μ΄λνλ€.
- β¨β¨ κ°μ λ°©ν₯μΌλ‘ λ λ² μ°μμΌλ‘ μμ§μΌ μ μλ€. β¨β¨
πΉοΈ λ¬Έμ νμ΄
- νμ¬ μμΉλ₯Ό κΈ°μ€μΌλ‘ κ·Έ μ λ¨κ³μ μ¬μ©νλ μ°λ£μ μμ κ³μ μκ³ μμ΄μΌ νλ€.
- κ·Έ μ λ¨κ³μ μ¬μ©νλ μ°λ£μ μκ³Ό νμ¬ μμΉμ μλ μ°λ£μ μμ ν©μ ꡬν΄μ μ΅μμ μ°λ£λ₯Ό μ¬μ©ν μ μλ κ²½μ°λ₯Ό dpλ°°μ΄μ μ μ₯νλ€.
- λ€λ§, κ°μ λ°©ν₯μΌλ‘ λ λ² μ°μμΌλ‘ μμ§μΌ μ μκΈ° λλ¬Έμ μ΄λ€ λ°©ν₯μΌλ‘ μ΄λνλμ§μ λν μ 보 λν μ μ₯νκ³ μμ΄μΌ νλ€.
π dp λ°°μ΄μ 3μ°¨μ λ°°μ΄λ‘ μμ±νμ¬ κ³μ°νλ©΄ ν¨μ¨μ μΌλ‘ μ²λ¦¬ κ°λ₯
- λ€λ§, κ°μ λ°©ν₯μΌλ‘ λ λ² μ°μμΌλ‘ μμ§μΌ μ μκΈ° λλ¬Έμ μ΄λ€ λ°©ν₯μΌλ‘ μ΄λνλμ§μ λν μ 보 λν μ μ₯νκ³ μμ΄μΌ νλ€.
β¨ μ νμ
dir : 3κ°μ§ λ°©ν₯ λ²νΈ
N : νμ¬ μμΉμ ν λ²νΈ
M : νμ¬ μμΉμ μ΄ λ²νΈ
β΄ dp[dir][N][M] = min(dp[dir][N][M], dp[dir-1][N+dx[dir]][M+dy[dir]], dp[dir+1][N+dx[dir]][M+dy[dir]])
π μ΄μ dir λ°©ν₯μ μμΉμμ νμ¬ μμΉλ‘ μ΄λν λ μλͺ¨λλ μ΅μ μ°λ£ μλͺ¨λ
- μ΄μ μ dir λ°©ν₯μΌλ‘ μ§ννλ€λ©΄, κ·Έ μΈμ λ°©ν₯μΈ dir+1, dir-1 μΌλ‘λ§ μ΄λ κ°λ₯νλ―λ‘ λκ°μ§ λ°©ν₯μ λν΄ λΉκ΅νλ€.
π©βπ» λ¬Έμ μ½λ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_17484_μ§μ°μλ¬μ¬ν {
static final int DIR = 3;
static int[] dx = {-1, -1, -1};
static int[] dy = {-1, 0, 1};
static int N, M;
static int[][] fuel;
static int[][][] dp;
static void simulate() {
for (int i = 1; i < N; i++) {
for (int j = 0; j < M; j++) {
for (int d = 0; d < DIR; d++) {
int nx = i + dx[d];
int ny = j + dy[d];
if (!isValid(nx, ny)) continue;
dp[d][i][j] = Math.min(dp[d][i][j], dp[(d + 1) % DIR][nx][ny] + fuel[i][j]);
dp[d][i][j] = Math.min(dp[d][i][j], dp[(d + 2) % DIR][nx][ny] + fuel[i][j]);
}
}
}
}
static boolean isValid(int x, int y) {
return x>=0 && y>=0 && x<N && y<M;
}
static int getMin() {
int result = Integer.MAX_VALUE;
for(int d=0; d<DIR; d++) {
for(int i=0; i<M; i++) {
result = Math.min(result, dp[d][N-1][i]);
}
}
return result;
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
fuel = new int[N][M];
dp = new int[DIR][N][M];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++) {
fuel[i][j] = Integer.parseInt(st.nextToken());
}
}
// dp μ΄κΈ°ν
for(int d=0; d<DIR; d++) {
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
if(i==0) {
dp[d][i][j]=fuel[i][j];
continue;
}
dp[d][i][j] = 10000000;
}
}
}
simulate();
System.out.println(getMin());
}
}
λ°±μ€μμ λ¬Έμ μ’ νλ €κ³ μ무거λ μ ννλλ° μ΅κ·Όμ μ½ν
μμ λ³Έ λ¬Έμ μ κ±°μ ν‘μ¬νλ€. (λκ°λ€κ³ ν΄λ 무방..)
λ°±μ€ λ¬Έμ λ₯Ό λ§μ΄ νμ΄μΌκ² λ€λ κ²μ λ°λ‘ 체κ°ν μ μμλ€..
'μκ³ λ¦¬μ¦ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 19238 μ€ννΈ νμ - Java (0) | 2024.04.11 |
---|---|
[BOJ] 17837 μλ‘μ΄ κ²μ2 - Java (0) | 2024.03.19 |
[BOJ] 20058 λ§λ²μ¬ μμ΄μ νμ΄μ΄μ€ν° - Java (0) | 2024.03.01 |
[BOJ] 21609 μμ΄ μ€νκ΅ - Java (0) | 2024.02.26 |
[BOJ] 1018 체μ€ν λ€μ μΉ νκΈ° - Java (0) | 2023.12.05 |
β¨ DP
https://www.acmicpc.net/problem/17485
17485λ²: μ§μ°μ λ¬ μ¬ν (Large)
첫μ€μ μ§κ΅¬μ λ¬ μ¬μ΄ 곡κ°μ λνλ΄λ νλ ¬μ ν¬κΈ°λ₯Ό λνλ΄λ N, M (2 β€ N, M β€ 1000)μ΄ μ£Όμ΄μ§λ€. λ€μ Nμ€ λμ κ° νλ ¬μ μμ κ°μ΄ μ£Όμ΄μ§λ€. κ° νλ ¬μ μμκ°μ 100 μ΄νμ μμ°μμ΄λ€.
www.acmicpc.net
π κ³ λ €ν΄μΌν μ
- μΌμͺ½ λκ°μ , μλ, μ€λ₯Έμͺ½ λκ°μ 3κ°μ§ λ°©ν₯μΌλ‘ μ΄λνλ€.
- β¨β¨ κ°μ λ°©ν₯μΌλ‘ λ λ² μ°μμΌλ‘ μμ§μΌ μ μλ€. β¨β¨
πΉοΈ λ¬Έμ νμ΄
- νμ¬ μμΉλ₯Ό κΈ°μ€μΌλ‘ κ·Έ μ λ¨κ³μ μ¬μ©νλ μ°λ£μ μμ κ³μ μκ³ μμ΄μΌ νλ€.
- κ·Έ μ λ¨κ³μ μ¬μ©νλ μ°λ£μ μκ³Ό νμ¬ μμΉμ μλ μ°λ£μ μμ ν©μ ꡬν΄μ μ΅μμ μ°λ£λ₯Ό μ¬μ©ν μ μλ κ²½μ°λ₯Ό dpλ°°μ΄μ μ μ₯νλ€.
- λ€λ§, κ°μ λ°©ν₯μΌλ‘ λ λ² μ°μμΌλ‘ μμ§μΌ μ μκΈ° λλ¬Έμ μ΄λ€ λ°©ν₯μΌλ‘ μ΄λνλμ§μ λν μ 보 λν μ μ₯νκ³ μμ΄μΌ νλ€.
π dp λ°°μ΄μ 3μ°¨μ λ°°μ΄λ‘ μμ±νμ¬ κ³μ°νλ©΄ ν¨μ¨μ μΌλ‘ μ²λ¦¬ κ°λ₯
- λ€λ§, κ°μ λ°©ν₯μΌλ‘ λ λ² μ°μμΌλ‘ μμ§μΌ μ μκΈ° λλ¬Έμ μ΄λ€ λ°©ν₯μΌλ‘ μ΄λνλμ§μ λν μ 보 λν μ μ₯νκ³ μμ΄μΌ νλ€.
β¨ μ νμ
dir : 3κ°μ§ λ°©ν₯ λ²νΈ
N : νμ¬ μμΉμ ν λ²νΈ
M : νμ¬ μμΉμ μ΄ λ²νΈ
β΄ dp[dir][N][M] = min(dp[dir][N][M], dp[dir-1][N+dx[dir]][M+dy[dir]], dp[dir+1][N+dx[dir]][M+dy[dir]])
π μ΄μ dir λ°©ν₯μ μμΉμμ νμ¬ μμΉλ‘ μ΄λν λ μλͺ¨λλ μ΅μ μ°λ£ μλͺ¨λ
- μ΄μ μ dir λ°©ν₯μΌλ‘ μ§ννλ€λ©΄, κ·Έ μΈμ λ°©ν₯μΈ dir+1, dir-1 μΌλ‘λ§ μ΄λ κ°λ₯νλ―λ‘ λκ°μ§ λ°©ν₯μ λν΄ λΉκ΅νλ€.
π©βπ» λ¬Έμ μ½λ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_17484_μ§μ°μλ¬μ¬ν {
static final int DIR = 3;
static int[] dx = {-1, -1, -1};
static int[] dy = {-1, 0, 1};
static int N, M;
static int[][] fuel;
static int[][][] dp;
static void simulate() {
for (int i = 1; i < N; i++) {
for (int j = 0; j < M; j++) {
for (int d = 0; d < DIR; d++) {
int nx = i + dx[d];
int ny = j + dy[d];
if (!isValid(nx, ny)) continue;
dp[d][i][j] = Math.min(dp[d][i][j], dp[(d + 1) % DIR][nx][ny] + fuel[i][j]);
dp[d][i][j] = Math.min(dp[d][i][j], dp[(d + 2) % DIR][nx][ny] + fuel[i][j]);
}
}
}
}
static boolean isValid(int x, int y) {
return x>=0 && y>=0 && x<N && y<M;
}
static int getMin() {
int result = Integer.MAX_VALUE;
for(int d=0; d<DIR; d++) {
for(int i=0; i<M; i++) {
result = Math.min(result, dp[d][N-1][i]);
}
}
return result;
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
fuel = new int[N][M];
dp = new int[DIR][N][M];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++) {
fuel[i][j] = Integer.parseInt(st.nextToken());
}
}
// dp μ΄κΈ°ν
for(int d=0; d<DIR; d++) {
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
if(i==0) {
dp[d][i][j]=fuel[i][j];
continue;
}
dp[d][i][j] = 10000000;
}
}
}
simulate();
System.out.println(getMin());
}
}
λ°±μ€μμ λ¬Έμ μ’ νλ €κ³ μ무거λ μ ννλλ° μ΅κ·Όμ μ½ν
μμ λ³Έ λ¬Έμ μ κ±°μ ν‘μ¬νλ€. (λκ°λ€κ³ ν΄λ 무방..)
λ°±μ€ λ¬Έμ λ₯Ό λ§μ΄ νμ΄μΌκ² λ€λ κ²μ λ°λ‘ 체κ°ν μ μμλ€..
'μκ³ λ¦¬μ¦ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 19238 μ€ννΈ νμ - Java (0) | 2024.04.11 |
---|---|
[BOJ] 17837 μλ‘μ΄ κ²μ2 - Java (0) | 2024.03.19 |
[BOJ] 20058 λ§λ²μ¬ μμ΄μ νμ΄μ΄μ€ν° - Java (0) | 2024.03.01 |
[BOJ] 21609 μμ΄ μ€νκ΅ - Java (0) | 2024.02.26 |
[BOJ] 1018 체μ€ν λ€μ μΉ νκΈ° - Java (0) | 2023.12.05 |