HyeLog

๋ฐฑ์ค€_11048_์ด๋™ํ•˜๊ธฐ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€_11048_์ด๋™ํ•˜๊ธฐ

shj718 2022. 8. 2. 18:30

๐Ÿ™‹โ€โ™€๏ธ ๋ฌธ์ œ

https://www.acmicpc.net/problem/11048

 

11048๋ฒˆ: ์ด๋™ํ•˜๊ธฐ

์ค€๊ทœ๋Š” Nร—M ํฌ๊ธฐ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜€์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” 1ร—1ํฌ๊ธฐ์˜ ๋ฐฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๊ณ , ๊ฐ ๋ฐฉ์—๋Š” ์‚ฌํƒ•์ด ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋ฏธ๋กœ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์œ— ๋ฐฉ์€ (1, 1)์ด๊ณ , ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋žซ ๋ฐฉ์€ (N, M)์ด๋‹ค. ์ค€๊ทœ๋Š”

www.acmicpc.net

 

๐Ÿงฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)

 

๐Ÿ’ก ์•„์ด๋””์–ด

D[i][j] = (1, 1)์—์„œ ์‹œ์ž‘ํ•ด์„œ (i, j)์— ๋„์ฐฉํ–ˆ์„ ๋•Œ ์‚ฌํƒ• ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’.

 

(i, j)์— ๋„์ฐฉํ–ˆ์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ (D[i][j]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€):

case 1) (1, 1) โ†’ (i, j - 1) โ†’ (i, j) ์ด๋•Œ, D[i][j] = D[i][j - 1] + A[i][j]

case 2) (1, 1) โ†’ (i - 1, j) โ†’ (i, j) ์ด๋•Œ, D[i][j] = D[i - 1][j] + A[i][j]

case 3) (1, 1) โ†’ (i - 1, j - 1) โ†’ (i, j) ์ด๋•Œ, D[i][j] = D[i - 1][j - 1] + A[i][j]

โ†’ D[i][j] = max(case 1, case 2, case 3) + A[i][j]

 

ํ•˜์ง€๋งŒ, ๋Œ€๊ฐ์„  ์ด๋™์€ ์˜ค๋ฅธ์ชฝโ†’์•„๋ž˜ / ์•„๋ž˜โ†’์˜ค๋ฅธ์ชฝ ๋‘ ๋ฐฉ๋ฒ•๋ณด๋‹ค ํ•ญ์ƒ ์‚ฌํƒ• ๊ฐœ์ˆ˜๊ฐ€ ์ ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฏ€๋กœ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋จ (A[i][j] โ‰ฅ 0 ์ผ ๋•Œ๋งŒ). ๋”ฐ๋ผ์„œ, case 3 ์€ ์ œ๊ฑฐ ๊ฐ€๋Šฅ.

 

๐Ÿ‘ฉโ€๐Ÿ’ป ์ฝ”๋“œ

#include <iostream>
#include <algorithm>

using namespace std;

int a[1001][1001];
int d[1001][1001];

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    // input
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }
    // dp
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            d[i][j] = max(d[i - 1][j], d[i][j - 1]) + a[i][j];
        }
    }
    // output
    cout << d[n][m] << '\n';
    return 0;
}