啊 我的答案有错误
---------------------------------------------------------------
题目:
给定正整数N和D,生成所有行和、列和等于D的NxN的非负整数矩阵。给出 N <= 5, D <= 8 的每一个<N, D>下这样的矩阵的数目
当N = 2, D = 1时,有 1 0 0 1 两种情况
0 1 1 0
当N = 2, D = 2时,有 2 0 0 2 1 1 三种情况
0 2 2 0 1 1
等等等等
由此我们可以看出 N = n, D = d 是由N = n, D = 1种选d个组合形成的
所以问题现在变成:1、2、3…n个数 从里面拿m个(可重复拿) 有多少种情况;
比如n = 2, m = 2, 11, 22, 33, 12, 13, 23 一共6种情况
然后我们祭出排列组合中的隔板法。。不会的可以去查。。组合是这个:Cn + m - 1, n - 1
然后数可能会超过int,所以用的python
def solution(n, m):
return a[n + m - 1] // (a[n - 1] * a[m])
a = [1] * (3200 + 5)
a[1] = 1
for i in range(2, 3200):
a[i] = a[i - 1] * i
n = int(input())
m = int(input())
print(solution(a[n], m))
634

被折叠的 条评论
为什么被折叠?



