有
O(n^1.5)一种基于规范动态程序的子集和算法。这是重复发生的情况:
C(m, k) is the size of the largest subset of 1..k whose squares sum to mC(m, k), m < 0 = -infinity (infeasible)C(0, k) = 0C(m, 0), m > 0 = -infinity (infeasible)C(m, k), m > 0, k > 0 = max(C(m, k-1), C(m - k^2, k-1) + 1)
计算
C(m, k)所有
m的
0..n和所有
k的
0..floor(n^0.5)。返回
C(n,floor(n^0.5))目标值。要恢复该集合,请追溯argmaxes。



