아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

내가 생각한 최강의 이불

시간 제한8초메모리 제한512 MB

요약
N개의 이불을 옷장에 쌓아 두고 스택처럼 꺼내고 넣는 방식으로 매일 침대 위 이불의 warmth 합을 정해, M일 동안 |수요 - 합|의 합이 최소가 되도록 만든다.
난이도

보통10점 중 7점

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

문제

당신은 새 생활을 준비하며 이불을 NN장 샀다. ii번째 이불은 sis_i의 온기 공급력을 가진다. 앞으로 MM일간의 기온 예측으로부터 jj번째 날에는 djd_j의 온기 수요가 예상된다. 온기가 부족해도 너무 많아도 쾌적함이 떨어지므로, jj번째 날 덮고 있는 이불의 온기 공급력 총합과 djd_j의 차의 절댓값을 jj번째 날의 불쾌도라고 부르기로 한다. 이 MM일 동안의 불쾌도 합계를 최대한 줄이고 싶다.

그런데 당신의 방은 안타깝게도 매우 좁아서 침대와 벽장밖에 없다. 그래서 침대에 이불을 1장 늘리려면 그때 벽장 맨 위에 있는 이불을 침대 맨 위에 올리는 수밖에 없다. 반대로 침대의 이불을 1장 줄이려면 그때 침대 맨 위에 있는 이불을 벽장 맨 위에 놓는 수밖에 없다. 또한 하루에 움직일 수 있는 이불의 장수에는 제한이 없지만, 한 번에 1장씩만 움직일 수 있다.

이제 당신은 방금 사 온 이불을 벽장에 넣을 예정이다. 이때에 한해 이불을 원하는 순서로 벽장에 넣을 수 있다. 어떻게 이불을 벽장에 넣고, 그 뒤 날마다 어떻게 이불을 꺼내고 넣어야 쾌적하게 매일을 보낼 수 있을까. MM일간의 불쾌도 합을 최소화할 때 그 합의 값을 구하라. 한 번도 사용되지 않는 이불이 있어도 되고, 이불을 한 장도 사용하지 않는 날이 있어도 된다.

입력

입력은 여러 데이터 세트로 이루어진다. 각 데이터 세트는 다음과 같은 형식이다.

N M
s1 s2 ... sN
d1 d2 ... dM

데이터 세트의 1번째 줄에는 이불의 장수 NN과 기온이 예측된 일수 MM을 나타내는 정수가 공백으로 구분되어 주어진다. 2번째 줄에는 NN개의 정수 s1,s2,…,sNs_1, s_2, \dots, s_N이 공백으로 구분되어 주어지고, sis_i는 ii번째 이불의 온기 공급력을 나타낸다. 3번째 줄에는 MM개의 정수 d1,d2,…,dMd_1, d_2, \dots, d_M이 공백으로 구분되어 주어지고, djd_j는 jj번째 날의 온기 수요를 나타낸다. 이 정수들은 1≤N≤151 \le N \le 15, 1≤M≤1001 \le M \le 100, 1≤si,dj≤1,000,0001 \le s_i, d_j \le 1{,}000{,}000을 만족한다.

입력의 끝은 N=M=0N = M = 0인 데이터 세트로 나타낸다. 이 데이터 세트에 대해서는 출력을 하지 않는다.

출력

각 데이터 세트에 대해 MM일간의 불쾌도 합의 최솟값을 1줄에 출력하라.

힌트

5번째 케이스에 대해서는 위에서부터 5, 2, 3, 1의 순서로 벽장에 넣고, 1일째에는 3장을 꺼내 ∣10−(5+2+3)∣=0|10 - (5 + 2 + 3)| = 0, 2일째에는 2장을 넣어 ∣4−5∣=1|4 - 5| = 1, 3일째에는 1장을 꺼내 ∣7−(5+2)∣=0|7 - (5 + 2)| = 0이므로 합계는 0+1+0=10 + 1 + 0 = 1이 된다.

예제1

  1. 예제 1

    입력
    1 1
    5
    6
    1 1
    5
    2
    1 1
    20
    5
    4 1
    2 4 5 9
    8
    4 3
    3 5 2 1
    10 4 7
    5 5
    2 2 2 2 2
    1 3 5 7 9
    2 5
    2 5
    2 5 2 5 2
    0 0
    
    예상 출력
    1
    2
    5
    1
    1
    5
    4