만드는 중입니다

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

세제곱수의 합

시간 제한0.5초메모리 제한256 MB

요약
자연수 N을 최소 개수의 자연수 세제곱의 합으로 나타내고, 그중 사전순으로 가장 앞서는 조합을 출력한다.
난이도

보통10점 중 7점

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

문제

자연수 NN이 주어진다. NN을 자연수의 세제곱 합으로 나타내되 항의 개수를 가장 적게 하려고 한다. 즉,

m13+m23+⋯+mk3=Nm_1^3 + m_2^3 + \cdots + m_k^3 = N

을 만족하는 자연수 m1,m2,…,mkm_1, m_2, \ldots, m_k를 찾고, 이때 kk를 최소로 한다. 같은 수를 여러 번 써도 된다.

입력

첫째 줄에 자연수 NN이 주어진다. (1≤N≤44,777,4441 \le N \le 44{,}777{,}444)

출력

두 줄을 출력한다. 첫째 줄에는 세제곱 항의 최소 개수 kk를 출력한다. 둘째 줄에는 세제곱해서 더하면 NN이 되는 자연수 kk개를 공백 하나로 구분해 출력하며, 앞의 수가 뒤의 수보다 작지 않도록 정렬한다.

항이 kk개인 조합이 여러 가지면 사전순으로 가장 앞서는 것을 출력한다. 두 조합을 앞에서부터 비교해 처음으로 달라지는 자리에 더 작은 수가 있는 쪽이 앞선다. 예를 들어 N=1729N = 1729는 123+1312^3 + 1^3과 103+9310^3 + 9^3 모두 세제곱 두 개로 나타내므로 답은 10 9이다.

예제2

  1. 예제 1

    입력
    42
    
    예상 출력
    7
    2 2 2 2 2 1 1
    
  2. 예제 2

    입력
    43
    
    예상 출력
    3
    3 2 2