3d组六推借号
请帮推荐一下3D组六复式?(六个数就行)?
设这五个数从小到大为
a+1,b+2,c+3,d+4,e+5
则
0≤a≤b≤c≤d≤e≤6
10≤a+b+c+d+e≤20
设k>=1个非负整数,最大不超过m>=0,和不超过n>=0,这样的无序组有f(m,n,k)个。本题结果为
f(6, 20, 5) -f(6, 9, 5)
则考虑最小的数是否为0(非0就整体-1,从而和n减少k),得到递推式
约定 f(m,负数,k)=0, f(负数, n, k)=0
所以n<k时,
f 的初值由定义决定:
m>=0, n>=0时 f(m,n,1)=min{m,n}+1
且当m>=n时,f(m,n,k)=f(n,n,k),另记为g(n,k), 递推式改写为
k>=1时, g(0,k)=1, g(1,k)=g(1,1)=2,
当n>=0时, g(n,1)=n+1
然后交给电脑递归一下。这个算法其实等价于几个几个数。
另外, km<=n时, (这条性质只是为了简化运算)
对于f(6 20 5),也可以这么递归,不过需要耐心和细心。这里换个算法,计算其反面。
5个不超过6的非负整数和不大于20,等价于5个不超过6的非负整数(即6-每个数)和不小于10
f(6 20 5)=(5个不超过6的非负整数构成的无序五元组个数)-f(6 9 5)
=(5个不超过11的正整数构成的五元组个数)-f(6 9 5)
=11*10*9*8*7/5!-g(4 5)=462-f(6 9 5)
g(3 2)=g(1 2)+g(3 1)=2+4=6
g(3 3)=g(0 3)+g(1 2)+g(3 1)=1+2+4=7
g(4 2)=g(2 2)+g(4 1)=g(0 2)+g(2 1)+5=1+3+5=9 (中间结果g(2 2)=4)
g(4 5)=g(4 4)=g(0 4)+g(1 3)+g(2 2)+g(4 1)=1+2+4+5=12
g(5 4)=g(1 4)+g(2 3)+g(3 2)+g(5 1)=2+g(2 2)+6+6=14+4=18
f(6 9 5)=6+7+9+12+18+24=76
f(6 20 5)-f(6 9 5)=462-76*2=310
==================
改了半天终于把错误都改过来了,果然递归这种东西还是交给计算机吧。