这个说得有点绕我有点蒙。
为什么是从n-1到n-6而不是n-7或者n-8呢?为什么只是前六次?我想这和一个骰子有六个点数有关,如果和为n的最后一个点数是1,那么前面的就是n-1;如果和为n的最后一个点数是2,那么前面的就是n-2;以此类推,如果和为n的最后一个点数是6,那么前面的就是n-6;而和为n的点数出现的次数必然表现为和n-1、n-2、……、n-6出现的次数之和。
如果说n-1、n-2、……、n-6也是点数总数,那它们对应的位置上存储的也是它们出现的次数,那为啥不用一个数组呢?一个数组不是更节省空间和时间,第n个位置上的数字直接等于它前面6个位置上数字之和,根本就用不着两个数组那么费劲啊!
因为该算法实质上用的是动态规划算法,在运算的过程中,一个数组在动态变化,该数组中从k到6k也就是当前个数的骰子的最大最小值区间。另一个数组维持原状,用来提供从k-6到k-1的次数。两者在循环的过程中交替进行。具体的请看我的在str.cpp中带有注释的运行结果。
最后去哪个数组的值作为结果呢?从函数的运行结果来看它是选择flag所标识的那个数组。这是为啥?我想这是因为flag所标识的那一组已经完全计算完毕后面没有一个是0值。