만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Devil's Hell deLivery

시간 제한2초메모리 제한1024 MB

요약
K개의 물건을 N대의 트럭에 나눠 싣고, 모든 물건을 배달하는 최소 단계 수와 단계별 배정을 출력합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 비트 연산, 완전 탐색
정답자
아직 제출이 없습니다

문제

Devil's Hell deLivery 회사는 말 그대로 모든 것을 배송한다. 상자, 소포, 패킷, 데이터그램 등이 그 대상이다.

A 도시에서 B 도시까지의 배송은 다음과 같이 진행된다. NN대의 트럭과 KK개의 물건이 있다. ii번 트럭의 용량은 cic_i이다. jj번 물건의 무게는 wjw_j이다. 트럭은 한 번 이상 배송 단계를 거친다.

한 단계에서는 일부 물건을 일부 트럭에 싣는다. 물건은 쪼갤 수 없다. 각 트럭에 배정된 물건의 총 무게는 그 트럭의 용량을 넘을 수 없다. 모든 트럭은 동시에 출발한다.

각 단계가 끝나면 모든 트럭은 출발했던 곳으로 돌아온다. 남은 물건이 있으면 다음 단계를 진행한다.

단계 수가 최소가 되도록 물건을 단계와 트럭에 나누어 배정하라.

입력

입력에는 최대 100개의 테스트 케이스가 들어 있다.

각 테스트 케이스는 트럭 수 NN과 물건 수 KK를 나타내는 두 정수로 시작한다 (1≤N≤51 \le N \le 5, 1≤K≤91 \le K \le 9). 다음 줄에는 트럭의 용량 c1,…,cNc_1, \ldots, c_N이 NN개의 정수로 주어진다 (1≤ci≤1081 \le c_i \le 10^8). 그다음 줄에는 물건의 무게 w1,…,wKw_1, \ldots, w_K가 KK개의 정수로 주어진다 (1≤wi≤1081 \le w_i \le 10^8).

출력

각 테스트 케이스에 대해 배송이 불가능하면 정수 −1-1만 적은 한 줄을 출력한다.

그렇지 않으면 필요한 단계 수 SS를 적은 한 줄을 출력한다. 이 값은 반드시 최소여야 한다. 이어서 각 단계를 설명하는 SS개의 줄을 출력한다. 각 단계 설명은 그 단계에서 배송하는 물건 수 IiI_i로 시작하고, 뒤이어 IiI_i개의 쌍 aja_j bjb_j가 온다. 한 쌍은 물건 aja_j를 트럭 bjb_j에 배정한다는 뜻이다.

최적해가 여러 개라면 그중 아무거나 하나를 출력하면 된다.

예제1

  1. 예제 1

    입력
    2 4
    10 20
    5 5 5 5
    2 1
    10 10
    20
    
    예상 출력
    1
    4 1 1 2 1 3 2 4 2
    -1