회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
[스포] dp문제라서 dp로 풀었는데.. 허탈하네요
2163번 - 초콜릿 자르기
ynifamily3
4년 전
2
단순히 N*M-1 만 하면 풀리네요 아이고
#include <iostream> #include <cmath> #include <unordered_map> #include <string> #include <set> using namespace std; int N, M; // NxM사이즈의 초콜릿을 자를 때, 최소 횟수로 완전 분해할수 있는 횟수. int choco[301][301]; int get_choco(int _N, int _M) { if (_N == 1) return _M - 1; if (_M == 1) return _N - 1; if (choco[_N][_M] != -1) return choco[_N][_M]; return choco[_N][_M] = 1 + get_choco(_N/2, _M) + get_choco(_N/2, _M) + (_N % 2) + (_N % 2) * (_M - 1); } // 4 * 10 => (2 * 5) // N * M 을 자를 때 // 2 * 3 // o o o // o o o // 최소횟수 5회. // 어떻게 자르든지 최소가 될거같은데? // 계산량 최소화 하려면 되도록 중앙에서 자르는 것이 좋을 듯. int main() { cin >> N >> M; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { choco[i][j] = -1; } } // 목표: choco[N][M] 값 구하기 cout << get_choco(N, M) << endl; return 0; }
댓글을 작성하려면
로그인
해야 합니다.
ynifamily3 4년 전 2
단순히 N*M-1 만 하면 풀리네요 아이고