본문으로 이동
코드패스 by Devin.KR

문제 4429 · 킬로 V

지원 도구의 동시 점검

인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms / 테스트 (언어별 보정은 아래 표)메모리: 측정하지 않음(브라우저 채점)0000.00%

문제

한 회사의 사내 IT 지원팀은 직원용 컴퓨터에 배포하는 지원 도구들을 점검하려 한다. 점검 대상 도구는 N개이며, 각 도구에는 1번부터 N번까지 서로 다른 번호가 붙어 있다. 지원팀은 이번 점검에 사용할 컴퓨터 한 대를 확보했다. 도구마다 점검 환경을 준비하는 데 필요한 저장 공간이 정해져 있고, 이 컴퓨터에서 점검에 사용할 수 있는 저장 공간은 B이다. 지원팀은 정확히 K개의 도구를 골라 점검 환경을 준비하려 한다. 선택한 도구들의 필요 공간을 모두 더한 값이 B 이하여야 한다. 필요 공간이 같은 도구라도 번호가 다르면 서로 다른 도구이며, 각각 독립적으로 선택할 수 있다. 공간을 나누어 사용하거나 도구 하나를 여러 번 선택하는 것은 허용하지 않는다. 저장 공간만 확인해서는 안 된다. 일부 도구 쌍은 같은 설정 파일을 서로 다른 방식으로 수정하므로, 같은 컴퓨터에 점검 환경을 함께 준비할 수 없다. 이러한 관계가 M개의 충돌 쌍으로 주어진다. 충돌 쌍에 포함된 두 도구 중 하나만 선택하는 것은 가능하지만, 둘을 모두 선택하는 것은 불가능하다. 충돌 관계는 입력에 주어진 쌍에만 적용된다. 예를 들어 1번과 2번이 충돌하고 2번과 3번이 충돌하더라도, 1번과 3번이 별도의 충돌 쌍으로 주어지지 않았다면 둘을 함께 선택할 수 있다. 지원팀은 조건을 만족하는 도구 선택 방법이 몇 가지인지 알고 싶다. 선택한 도구 번호의 집합이 같으면 선택 순서와 관계없이 같은 방법으로 센다. 정확히 K개를 선택하고, 필요 공간의 합이 B 이하이며, 어떤 충돌 쌍도 동시에 선택하지 않는 방법의 수를 구한다. 가능한 방법이 없으면 0을 출력한다. K가 0이면 아무 도구도 선택하지 않는 방법 하나가 있으며, 이 방법의 필요 공간은 0이다.

입력

첫째 줄에 정수 N, K, B, M이 공백으로 구분되어 주어진다. 1 ≤ N ≤ 20, 0 ≤ K ≤ N, 0 ≤ B ≤ 20,000, 0 ≤ M ≤ N(N-1)/2이다.
둘째 줄에 각 도구의 필요 공간을 나타내는 정수 A_1, A_2, ..., A_N이 주어진다. 모든 i에 대해 1 ≤ A_i ≤ 1,000이다.
다음 M개 줄에는 충돌하는 두 도구의 번호 u, v가 주어진다. 1 ≤ u < v ≤ N이며, 같은 충돌 쌍은 중복해서 주어지지 않는다. M이 0이면 충돌 쌍을 나타내는 줄은 없다.

출력

조건을 만족하는 도구 선택 방법의 수를 정수 하나로 출력한다. 가능한 방법이 없으면 0을 출력한다.

예제 입력 1

4 2 7 2
2 3 4 5
1 2
3 4

예제 출력 1

3

예제 입력 2

3 2 3 0
2 2 2

예제 출력 2

0

예제 입력 3

3 0 0 2
7 7 7
1 2
2 3

예제 출력 3

1
힌트 펼치기
  • 도구를 번호 순서대로 살펴보며 선택하는 경우와 선택하지 않는 경우로 나눈다.
  • 이미 선택한 도구와 충돌하거나 공간을 초과하는 선택은 중단한다. 남은 도구를 모두 골라도 K개가 되지 않는 경우도 중단할 수 있다.

관련 서재 장

관련 장

출처: Devin.KR 자체 제작

알고리즘 분류백트래킹완전 탐색

풀이 작성

연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.

Python 기본 시간 제한 = 문제 시간 제한 × 3 + 2초. 문제별 예외는 아래 표에 반영됩니다. 표준 라이브러리만 지원합니다.

Ctrl+Enter: 연습 채점 · Tab: 들여쓰기 · Esc 후 Tab: 다음 요소로 이동. 언어별 초안은 이 브라우저에 저장됩니다. JavaScript 입력: require('fs').readFileSync(0, 'utf8'), readline 또는 input().

로그인하면 인증 제출을 사용할 수 있습니다.

풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.

    연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.

    이 브라우저의 연습 기록

      언어별 제한

      테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.

      언어엔진(버전)시간 제한메모리
      javascript사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름)1000ms / 테스트측정하지 않음(브라우저 채점)
      pythonPyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음(브라우저 채점)