문제

문제 링크

어떻게 접근할 것인가

  • 이 문제은 디피로 접근할 수 있는 문제이다.
  • 일단 세로든 가로든 자르는 횟수를 모두 찾고 어느걸 먼저 자르는게 더 적은지 비교해서 출력한다.
  • 자르는 횟수는 어레이에 저장하면서 계산한다.

코드

#include <cstdio>
int n, m, x[2][301], cnt[2];
int main(){
    scanf("%d %d", &n, &m);
    x[0][n] = 1, x[1][m] = 1;
    for(int i = 0; i < 2; i++){
        for(int j = 300; j > 1; j--){
            if(!x[i][j])continue;
            x[i][j/2] += x[i][j], x[i][j - j/2]+= x[i][j];
            cnt[i]+= x[i][j];
        }
    }
    int nfirst = cnt[0] + cnt[1]*n, mfirst = cnt[1] + cnt[0]*m;
    printf("%d", mfirst > nfirst ? nfirst : mfirst); 
}

느낀점

  • 잘 접근한 것에 감사하다.