整数组合的数量,以及特定列表中的数字

时间:2016-08-22 15:32:12

标签: algorithm haskell math number-theory integer-partition

每个正整数n具有2 ^(n-1)个不同的组成。如果我想要的组合数量只有我列表中的特定数字:

例如4的组合是

4
3 1
1 3
2 2
2 1 1
1 2 1
1 1 2
1 1 1 1

但是如果我想要它只有1和2的4的组合数, 我怎么能计算不同成分的数量?

2 2
2 1 1
1 2 1
1 1 2
1 1 1 1

编辑: 这里计算数字的Haskell代码,但我认为即使我为Number 70添加记忆也需要太长时间

main :: IO ()
main = do
     putStrLn "Enter the integer number"
     num' <- getLine
     let num = read num' :: Int
     putStr ""
     let result= composition num
     let len=length result
     print len
      --print result

composition 0 = [[]]
composition n = [x:rest | x <- [1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000],x<=n ,rest <- composition (n-x)]

1 个答案:

答案 0 :(得分:1)

您可以使用动态编程来计算所需合成的数量。 示例的递归关系示例:

name = input("Please enter your name: ")
if name == 'Alice':
    print('Hi, Alice.')

此处 P(4, [1,2]) = P(3, [1,2]) + P(2, [1,2]) 是从列表中生成N的变体数

尝试概括公式并使用自上而下的记忆或自下而上的表填充DP来快速找到结果。

Delphi示例:

P(N, [list])