조건은 다음과 같음
A[4][4][4]
라는 배열의 각 원소에 모두 숫자가 들어가 있고 꽉차있다고 가정함 일단은 ㅇㅇ
그런다음 그 숫자는 양수일수도 음수일수도 있음
이때 큐브의 임의의 위치에서
예컨데
A[0][0][0] 에서 더해질 다음 원소는
x좌표 0, y좌표 0, z좌표 0을 포함하면은안됨
따라서 위 사진에서
제일 처음에 나온 4*4*4큐브에서 (0,0,0) 에서 시작한다고 가정하면
두번째 사진처럼, (1,1,1) 을 기점으로한 3*3*3 자리에 있는 숫자만 더해주는 것이 가능함.
그리고 첫번째 시작한 스타트점과
두번째로 더해지는 점의 숫자는
x1 < x2, y1 < y2, z1 <z2 를 만족함
그렇게 해서 덧셈이 가능한 큐브의 숫자들을 모아서 계속 더해서 결과를 냄ㅇㅇ
이때 큐브의 어느 지점에서 저 짓을 시작했을때, 나올 수 있는 덧셈의 최대값을 구하고싶음
일단 삼차원 배열에 숫자를 모두 입력받는거까지 됬고
그 다음에 어느 위치에서 스타트할껀지 정하기 위해 또 다시 삼중포문을 돌린다음에
그 스타트한 부분에서 다음 값을 알기 위해서 해야하는데
역방향으로 올라가서 동적계획으로 짜는것이 뭔가 이문제의 목표같은데
아니 다시한번찬찬히생각해보자
맨 위에서 시작하든 맨 아래에서 시작하듯 대칭이니까 최대값은 뭐라해야하지
그러니까 큐브를 좁혀가면서
4*4*4에서 3*3*3으로 내려갈때
그 각각의 3*3*3에서의 최대값을 구한후
그걸또 2*2큐브에저장한후 바꾸어가면
맨 마지막에 남은 큐브에 최대값을 구하는게 나오는건가?
코딩뉴비형 저 머릿속으로 이게 구현은되는데 코딩으로 잘 안옮겨져서그런데
A하고 D는 3차원 테이블을 두개 만들어야되는거?
D[i][j][k] = max(D[i - 2][j-1][k-1], D[i][j - 1][k], D[i-1][j-1][k - 2], D[i - 2][j - 2][k - 2] + A[i-1][j-1][k-1], A[i-1][j-1][k-1]) 아님요??
x1 < x2, y1 < y2, z1 <z2 이거 and임
ㅇㅇ//됬->됐 (되어 = 돼임) [리듬 맞춤법 봇♬]
예컨데->예컨대 (예컨대 단언컨대 생각건대 하건대 등등..) [리듬 맞춤법 봇♬]