낮은 구간 합 행렬

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

요약
N행 M열 행렬(둘 다 10 이하)에서 최대 K개 원소의 부호를 바꿔 가로 또는 세로 연속 부분합이 모두 S 이하가 되도록 만들 수 있는지 판정한다.
난이도

어려움10점 중 9점

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

문제

연회에서 카드 한 장을 받았다. 카드에는 NN행 MM열의 행렬과 두 정수 KK, SS가 적혀 있다. 행렬의 모든 원소는 정수이고, 위에서 ii번째 행, 왼쪽에서 jj번째 열의 정수를 Ai,jA_{i,j}로 나타낸다.

행렬에서 최대 KK개의 원소를 골라 부호를 바꿀 수 있다. 세로 또는 가로로 연속한 부분 수열 중 합이 SS보다 큰 것이 없도록 행렬을 만들 수 있다면, 카드를 상품과 교환할 수 있다.

주어진 카드를 상품과 교환할 수 있는지 판별하시오.

입력

입력은 다음과 같은 형식의 단일 테스트 케이스로 주어진다.

$N$ $M$ $K$ $S$
$A_{1,1}$ $A_{1,2}$ $\cdots$  $A_{1,M}$
$\vdots$
$A_{N,1}$ $A_{N,2}$ $\cdots$  $A_{N,M}$

첫째 줄에 네 정수 NN, MM, KK, SS가 주어진다 (1≤N,M≤101 \le N, M \le 10, 1≤K≤51 \le K \le 5, 1≤S≤1061 \le S \le 10^6). 다음 NN개의 줄은 카드에 적힌 행렬을 나타낸다. (i+1)(i+1)번째 줄에 MM개의 정수 Ai,1A_{i,1}, Ai,2A_{i,2}, …\ldots, Ai,MA_{i,M}가 주어진다 (−105≤Ai,j≤105-10^5 \le A_{i,j} \le 10^5).

출력

카드를 상품과 교환할 수 있으면 Yes를, 그렇지 않으면 No를 출력한다.

예제4

  1. 예제 1

    입력
    3 3 2 10
    5 3 7
    2 6 1
    3 4 1
    
    예상 출력
    Yes
    
  2. 예제 2

    입력
    2 3 1 5
    4 8 -2
    -2 -5 -3
    
    예상 출력
    Yes
    
  3. 예제 3

    입력
    2 3 1 5
    9 8 -2
    -2 -5 -3
    
    예상 출력
    No
    
  4. 예제 4

    입력
    2 2 3 100
    0 0
    0 0
    
    예상 출력
    Yes