배낭 문제(Knapsack Problem) - 경우의 수(조합) 구하는 방법
Knapsack Problem 냅색 문제 배경 혹은 필요성 예를 들어, 배낭에는 최대 4kg까지 넣을 수 있다. 물건 A~C 중 어느 것을 담아야 할까?방법론 1. 비싼 물건 먼저 차례로 넣는다. 2. 가벼운 물건 먼저 차례로 넣는다.3. 비싼 물건 먼저, 가벼운 물건 먼저 두 가지 방법으로 모두 해보고, 그 중 금액이 비싼 것을 선택한다.=> 세 가지 방법 모두 틀림. 왜냐하면 문제가 아래와 같은 조건으로 주어질 경우, 잘못된 답을 고르게 되기 때문이다. 또 다른 방법론으로 Exhaustive Search가 있다. 모든 경우의 수를 다 확인해보는 방법이다.이 방법을 사용할 경우, 지금 문제의 경우의 수는 A를 배낭에 넣고 안넣고 2가지가 가능하고,B를 배낭에 넣고 안넣고 2가지, C를, D를,,, 해서..
2018. 10. 31.
[성실코딩 15일차] 백준 #2583 영역 구하기 / DFS
문제는 쉬운데 보통 배열 인덱스 매기는 방향과 다르게 모눈종이의 왼쪽 아래를 (0,0) 오른쪽 위를 (N,M)로 가정해서 입력을 준다. 그리고 칸으로 수를 증가시키는 게 아니라 꼭지점으로 수를 증가시키고 있음 이런 디테일한 부분 놓치지않고 꼼꼼하게 문제푸는 능력 기르기! #include #include #include using namespace std; int map[101][101] = {}; int m, n; // map의 행, 열 // result int num_area = 0; int temp_area_size = 0; vector area_size; // map 이동 int dx[4] = {0,0,-1,1}; // 열, 상하좌우 int dy[4] = {-1,1,0,0}; // 행 void df..
2018. 10. 31.