回复 16楼 吹水佬
问题是这样的:x+y+z+u+v+m=N,如果未知数不加限制,则用排列组合中的挡板法可以直接求出,现在的问题是限制未知数取某数的倍数,这个某数是大于等于2即可,我们也可以先研究个具体的,比如不能取5的倍数。
我们把未知数x(y,z,u,v,m)=Pt+r的形式,与数论中的剩余类(剩余系)有点相似,0<r≤P-1,
这样每个未知数就是两部分组成的,而且t与r各自独立,根据乘法原理x=Pt+r是分步关系,如果t有i种方法,r有j种方法,则对于一个x来说,共有ij种方法。
x+y+z+u+v+m=N→(x+y)+(z+u+v+m)=N→((x+y)+[(z+u)+(v+m)]=N
我们先打分,充分利用对称原理,把(x+y)分成一个区块,(z+u+v+m)分成一个区块,假说x+y=N1,z+u+v+m=N2,N1+N2=N的情况下,得到N1有j1种方法,得到N2有j2种方法,则共有j1j2种方法,在整个运算过程中,始终是把未知数分区,2个变量和+(2个变量和+2个变量和)=2个变量和+4个变量和=N,(最开始一步是1个变量+1个变量=N2),然后,用2+2=4(数字都是代表的变量个数),2+4=6(同前注解),第一步是1+1=2.
数据区域用“+”,统计区域用“*”,第一步例外,直接统计各种和值的个数,第二步在第一步的基础上进行,把“和值”用在数据区域,首列,顶行都是用它,形成二维数据结构;把统计2的值照样处理,排列成首行,首列二维数据(它的二元运算用“*”,前边的数据区域用“+”),然后统计数据区域和值一样的有多少,即找到统计对应位置上的数求和。
实际上,这些叙述不一定起多大作用,需要看一下整个帖子实例,每步干什么,最后得到什么数值。