求和(DFS)

输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来 

输入描述:
每个测试输入包含2个整数,n和m


输出描述:
按每个组合的字典序排列输出,每行输出一种组合

输入例子:
5 5

输出例子:
1 4
2 3
5

import sys

def DFS(x, sum, li, n, m):
	if sum > m:
		return
	if sum == m:
		# 输出结果
		le = len(li)
		for i in range(le - 1):
			print li[i],
		print li[le - 1]

	for i in range(x, n + 1):
		li.append(i)
		DFS(i + 1, sum + i, li, n, m)
		li.remove(i)

try:
	line = sys.stdin.readline().strip()
	line = [int(x) for x in line.split()]
	n, m = line[0], line[1]

	DFS(1, 0, [], n, m)
except:
	pass



你可能感兴趣的:(ACM-2016校招真题)