atcoder ABC113 D 문제
h tps // 아 t 여기 r. jp / sts / abc113 / sks / abc113_d
정책
아미다 복권을 바탕으로 좋아하는 가로 막대를 배치하고 지정한 위치에 오도록 할 수있는 가로 막대의 배치 조합을 세는 문제이다. 아미다쿠지의 성질상, 횡봉은 수평이므로, 어느 높이를 h로 하고, 왼쪽에서 w열째에 대해 생각하면, h-1로부터(h,w)에 오는 것은, 3가지
(1) 높이 h-1에서 w열과 w-1열이 연결되어 있을 때
(2) 높이 h-1에서 w열과 w+1열이 연결되어 있을 때
(3) (1) (2) 이외 (바닥에서 내려올 때)
즉, 각 높이에 대해 가로 막대를 놓는 방법을 전체 열거하고, (1) ~ (3)의 경우 나누기를 하여 dp를 갱신해 나가는 것으로, 목적의 높이 H, K열째의 총수를 구할 수 있다. 여기서 문제가되는 것은 가로 막대의 전체 열거 방법이지만, 여기서는 전체 비트 검색을 사용합니다.
비트 전체 탐색이란?
비트 연산을 사용하여 가로 막대를 나타냅니다. 근본적인 사고방식으로서는, 비트 연산은 2진수로 생각하기 때문에, 01을 왼쪽으로 1비트 한다(1에 2를 곱한다)와 10(2)가 된다. 즉, 0001의 1을 가로 막대로 표현하자는 것이다. 여기에서
for(int i = 0;i < (1 << W-1);i++){
}
와 같이 하면, 0001,0010,0011,0100,0101,.....와 같이 w번째까지 전대로 2진수로 나타낼 수 있다. 즉 가로 막대의 조합을 전체 열거할 수 있다. 여기서, 문제 문장을 보면, 옆이 연결되는 것은 금지되어 있다. 그림에서 보면 다음과 같은 느낌.
그러므로 이러한 배치는 제거되어야 한다. 여기서 가로 막대를 2진수의 1로 나타낸 것을 생각해, 옆에서 연결되어 있는 것을 11로 나타내면 된다고 깨닫는다. 따라서 배열 (예 : 01010)에 대해 (00011,00110,01100,11000)과 같이 11을 왼쪽에서 오른쪽으로 슬라이드하고 비트 논리 곱 (&)을 취하고 11을 슬라이드 한 것과 동일 가 될지 여부에 따라 가로 막대가 연결되어 있는지 여부를 결정할 수 있습니다.
예를 들어 특정 배치가 (10011) 일 때 00011과 논리 곱을 취하면
예System.out.print(11 & 3) // 10011 & 00011
결과3 //00011
된다.
인용, 참고
h tp : ///ぉゔぇdゔぉら kぁ하자 t. 하테나 bぉg. 이 m / 엔 try / 비 t 푹 l 음 rc h t t : // 카루. jp. rg / 카루 / 2008-04-10-2. php
Reference
이 문제에 관하여(atcoder ABC113 D 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryoooooory/items/a44de51c7cb7cab20ce8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
비트 연산을 사용하여 가로 막대를 나타냅니다. 근본적인 사고방식으로서는, 비트 연산은 2진수로 생각하기 때문에, 01을 왼쪽으로 1비트 한다(1에 2를 곱한다)와 10(2)가 된다. 즉, 0001의 1을 가로 막대로 표현하자는 것이다. 여기에서
for(int i = 0;i < (1 << W-1);i++){
}
와 같이 하면, 0001,0010,0011,0100,0101,.....와 같이 w번째까지 전대로 2진수로 나타낼 수 있다. 즉 가로 막대의 조합을 전체 열거할 수 있다. 여기서, 문제 문장을 보면, 옆이 연결되는 것은 금지되어 있다. 그림에서 보면 다음과 같은 느낌.
그러므로 이러한 배치는 제거되어야 한다. 여기서 가로 막대를 2진수의 1로 나타낸 것을 생각해, 옆에서 연결되어 있는 것을 11로 나타내면 된다고 깨닫는다. 따라서 배열 (예 : 01010)에 대해 (00011,00110,01100,11000)과 같이 11을 왼쪽에서 오른쪽으로 슬라이드하고 비트 논리 곱 (&)을 취하고 11을 슬라이드 한 것과 동일 가 될지 여부에 따라 가로 막대가 연결되어 있는지 여부를 결정할 수 있습니다.
예를 들어 특정 배치가 (10011) 일 때 00011과 논리 곱을 취하면
예
System.out.print(11 & 3) // 10011 & 00011
결과
3 //00011
된다.
인용, 참고
h tp : ///ぉゔぇdゔぉら kぁ하자 t. 하테나 bぉg. 이 m / 엔 try / 비 t 푹 l 음 rc h t t : // 카루. jp. rg / 카루 / 2008-04-10-2. php
Reference
이 문제에 관하여(atcoder ABC113 D 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryoooooory/items/a44de51c7cb7cab20ce8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)