给定一个数字n,我们必须找到多个集合,使得从1到n的每个数字可以通过添加该集合的一些元素和该集合的数字总和来形成唯一等于n。例如,如果n = 5,则{1,1,1,1,1},{1,2,2},{1,1,3}有效,{1,1,1,2}无效,因为3 = 1 + 1 + 1和3 = 1 + 2即3不是唯一形成的。同样{1,2,4}是无效的,因为即使从1到4的所有数字都是唯一形成的,它的元素总和是7 5.这是CodeChef (Money Matters)的问题。我已经看到了一些答案,但仍未能解决。有人能给我提供一些提示或指示吗? n的范围:n <10 ^ 9
答案 0 :(得分:0)
考虑N×N矩阵,其中每个元素计数到N.使用2个循环构建此矩阵。然后,总和为N的每一行都是一个解决方案。
当N = 5 build:
0 0 0 0 0
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
0 0 0 0 4
0 0 0 0 5 SOLUTION
0 0 0 1 1
0 0 0 1 2
0 0 0 1 3
0 0 0 1 4 SOLUTION
0 0 1 0 1
etc.
答案 1 :(得分:-1)
一些递归可能会有所帮助:
function GetSets(int TotalToHit)
{
solutions += {TotalToHit};
for int i = 1; i <= TotalToHit / 2; i ++
{
solutions += { i, GetSets(TotalToHit - i) };
}
return solutions;
}