整数求和(背包问题)

题目描述

给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120

输入:
整数n和m
输出:
求和等于m的所有组合的个数。

样例:
输入:
6 8
输出
4

方法

典型的背包问题

def fun(s, li, n):
    global sum

    if s == 0:
        return True
    if s < 0 or (s > 0 and n < 1):
        return False

    if fun(s-li[n-1], li, n-1): # 选中n
        sum += 1
    if fun(s, li, n-1):  ## 不选n
        sum += 1

if __name__ == '__main__':
    n = 6
    m = 7
    sum = 0
    fun(m, list(range(1, n+1)), 6)
    print(sum)

猜你喜欢

转载自blog.csdn.net/qq_36653505/article/details/82634774