본문 바로가기
온라인저지

[BOJ] 2163번: 초콜릿 자르기

by plzfday 2018. 6. 2.

2163번: 초콜릿 자르기

풀이

감이 안 잡혔는데 그냥 우리가 실제로 초콜릿을 쪼갤 때를 생각하면 된다. 보통 반으로 계속 쪼개지 않는가? 그걸 생각하며 관계식을 세우면 된다.
가로로 반으로 쪼갤 때 or 세로로 반으로 쪼갤 때 중 최솟값을 구하면 된다.

코드

#include <cstdio>
#include <algorithm>
int D[301][301], N, M;

int f(int n, int m)
{
    // 종료 조건
    if (n == 1)
        return D[n][m] = m - 1;
    else if (m == 1)
        return D[n][m] = n - 1;
    return D[n][m] = std::min(n * f(1, m) + (n - 1), m * f(n, 1) + (m - 1));
}

int main()
{
    scanf("%d %d", &N, &M);
    printf("%d\n", f(N, M));
    return 0;
}

 

'온라인저지' 카테고리의 다른 글

[BOJ] 1932번: 정수 삼각형  (0) 2018.06.04
[BOJ] 11057번: 오르막 수  (0) 2018.06.03
[BOJ] 1010번: 다리 놓기  (0) 2018.06.03
[BOJ] 5622번: 다이얼  (0) 2018.06.02
[BOJ] 11052번: 붕어빵 판매하기  (0) 2018.06.02
10844번: 쉬운 계단 수  (0) 2018.06.01

댓글