3683] 고양이와 개 BOJ 2016. 11. 21. 22:17

문제 설명

: N명의 사람과 c마리의 고양이, d마리의 개가 있다.
한사람 당 다음 라운드에 진출시킬 고양이(개)와 탈락시킬 개(고양이)를 선택한다.

어떤 투표들을 반영시켜야 많은 사람들을 만족시킬 수 있을것인가?



문제 풀이

: 그래프 모델링을 다음과 같이 한다.
한쪽에는 고양이를 통과시키려고 했던 사람들, 다른 한쪽으로는 개를 통과시키려고 했던 사람들.

그다음 연결은 어떻게 하냐하면, 의견이 충돌되는 사람들로 연결을 해준다.
즉, A가 통과시키려고 했던 고양이(개)가 B가 떨어뜨리려고 했던 고양이(개)거나,
반대로 A가 떨어뜨리려고 했던 고양이(개)가 B가 통과시키려고 했던 고양이(개)라면 이 둘을 연결해준다. 

이렇게 한다면 이분 그래프의 형성이 가능해진다.

그렇다면 이분 매칭을 했을때 나오는 최대값은 무엇을 뜻할까?

생각해보면, 의견이 상충되는 경우에는 한쪽의 의견만이 통과될 수 있다.
(상충되는 의견 두개가 통과된다는건 모순이기 때문이다)

즉, 어느 한쪽을 탈락시키면 충돌은 모두 해결된다.
(누군가를 탈락시키면 나머지 의견들은 수용되기 때문이다)

결국에 모든 충돌(edge)들을 해소시키면서 최대한 적은 사람들을 떨어뜨려야 한다.

예를 들어 A-B, A-C, A-D가 연결되어 있다면, A를 탈락시킴으로써 B,C,D를 만족시킬 수 있다.
A(vertex)를 택함으로써 B,C,D와 의견이 충돌(edge)되는 것들을 모두 해소(cover) 시킨 것이다!!

결국 minimum vertex cover가 된다.  
(minimum vertex cover를 간단하게 설명하자면 이분 그래프에서 양쪽 그룹에서 임의의 vertex들을
최소로 선택하면서 연결된 모든 edge들을 색칠(cover)하는 것을 의미한다.)

그리고 쾨닉의 정리에 의해서 minimum vertex cover는 최대 이분 매칭의 값과 동치이다.
이 값을 v라고 하면 답은 N-v가 된다.
(최소한의 사람을 떨어뜨리면 결국 이 값을 빼면 최대의 만족하는 사람이 나온다!)


문제링크 [3683 : 고양이와 개]



소스 코드


'BOJ' 카테고리의 다른 글

1301] 비즈공예  (0) 2016.11.12
1937] 욕심쟁이 판다  (0) 2016.10.14
2306] 유전자  (0) 2016.09.25
8992] 집기 게임(Pickup Game)  (1) 2016.09.21
8462] 배열의 힘 & Mo's Algorithm  (0) 2016.08.20
1301] 비즈공예 BOJ 2016. 11. 12. 20:54

문제 설명

: 개수가 정해진 색깔이 다른 구슬들을 일렬로 배치하면서, 연속된 3개의 구슬에는 중복이 일어나지 않게하는
경우의 수를 구하는 문제이다.

7차원 dp로 해결이 가능하다, 5차원은 각 구슬의 사용 개수를 의미하고 나머지 2차원은 이전과 그 이전에 놓인
구슬의 종류를 의미한다.



문제링크 [1301 : 비즈 공예]



소스 코드


'BOJ' 카테고리의 다른 글

3683] 고양이와 개  (2) 2016.11.21
1937] 욕심쟁이 판다  (0) 2016.10.14
2306] 유전자  (0) 2016.09.25
8992] 집기 게임(Pickup Game)  (1) 2016.09.21
8462] 배열의 힘 & Mo's Algorithm  (0) 2016.08.20
1937] 욕심쟁이 판다 BOJ 2016. 10. 14. 13:33

문제 설명

: 임의의 출발점에서 시작해서 동서남북 방향으로 이동하며 가장 긴 내림차순 수열의 길이를 출력.


동적계획법으로 해결이 가능하다.

이동한 다음에는 그 이전 상태를 되돌아가는 경우가 없는 것은 자명하므로, 갱신되지 않은 부분부터

시작해서 구간들을 다 구해나가면 된다.


하나의 경로를 완성시키면 부분 경로들은 메모이제이션을 통해서 다 완성이 된다.



문제링크 [1937 : 욕심쟁이 판다]



소스 코드


'BOJ' 카테고리의 다른 글

3683] 고양이와 개  (2) 2016.11.21
1301] 비즈공예  (0) 2016.11.12
2306] 유전자  (0) 2016.09.25
8992] 집기 게임(Pickup Game)  (1) 2016.09.21
8462] 배열의 힘 & Mo's Algorithm  (0) 2016.08.20