无题的题目

啊 我的答案有错误

---------------------------------------------------------------

题目:

给定正整数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))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值