문제
풀이
$dp[i][j][k]$를 $1$열부터 $i$열까지 고려했을 때 $i$열에 $j$만큼의 칸을 형에게 할당했을 때 합이 $k$인 경우가 존재하는지 여부로 정의합시다.
$i$열에서 밑에서부터 $j$칸의 합을 $S$라 하면 아래 점화식을 통해 $dp$를 구할 수 있습니다.
\[dp[i][j][k] = \underset{l \le j}{\operatorname{any}}(dp[i - 1][l][k - S])\]$\operatorname{any}$ 함수는 하나라도 참이면 참을 반환하는 함수입니다.
논에 있는 예상 수확량을 전부 합한 값을 $T$라 할 때 $dp[N][j][k]$가 참이고 $|T - 2k|$가 최소인 것이 답이 됩니다.
이때 역추적은 $dp[i][j][k]$가 참이 되도록 하는 이전 열의 $j$를 기록하는 방식으로 추적할 수 있습니다.
코드
1 | |