离散数学组合数学部分的例12.6
解析没看懂,自己上网查阅了一些资料。网上内容都是长篇大论,抽丝剥茧一下。
简单的建模尝试。
一,约束条件。
要求为“不相邻”。
不妨假设取的数为a1,a2,...,ak。
对于间距来说,就有:
二,解决方法。
1.动态规划
在Quora上看到过一个帖子,
“如何给四岁小孩解释动态规划。”
大概内容就是:
给小孩在纸上写下:“1+1+1+1+1+1+1+1”,让他计算结果。
小孩努力算出来了是8。
然后让小孩在左面在写一个“1+”,问他答案是几,小孩一下子就得到了是9。
为什么呢?
因为他知道后面那一长串答案是多少。
动态规划就是“remembering stuff to save time。”记住一些东西,可以节省时间。
也就是所谓的,用小问题的解来推导大问题的解。
定义 dp[i][j]: 表示从前 i 个数中选出 j 个不相邻数的方法数。
对于前i个数的集合而言,
这里的dp[i][j]有两个状态,
那么边界条件也就很明显了。
举个例子,从5个数里选择2个不相邻的数字,
dp[5][2]=dp[3][1]+dp[4][2]
对于dp[3][1]:你已经选择了第五个,接下来选择另一个数字只能从前3个里再选1个。
对于dp[4][2]:你没有选择第五个,接下来就要从前四个数字里选择两个。
dp[4][2]=dp[2][1]+dp[3][2]
dp[3][2]=dp[1][1]+dp[2][2],显然dp[2][2]不成立。所以记作0。
dp[3][2]=1,
dp[4][2]=2+1=3
dp[5][2]=3+3=6,
over
2.组合分析,是书上的步骤
这个其实就是书上的方法,但我查了很多资料才明白。
作者:与我无关的忧伤
链接:https://www.zhihu.com/question/25820012/answer/702189237
来源:知乎
作者大大真的牛
从 n 个数里面取 k 个之后,那么这 k 个里有 k+1 个空。
题目的意思是这 k 个数两两不相邻,这说空隙 1∼k−1 中间都需要有数填充;0,k 是可以不填也可以填。
这就可以转化为一个方程组的解的问题:
设空隙 0∼k 所填的值为
则有方程
其中有限制条件 x0≥0,xk≥0,xi≥1,i=1,2,...k−1 ,i=1,2,...k-1
所以需要求解的是上面方程在有限制条件下的解的个数,换元处理
PS:这步就是书上困扰人很久的n-2k+1。
这里直接放作者大大的题解了
PS:因为我没看懂
还有一种方法等期末周以后再补吧
希望搜这道题的各位期末取得好成绩啦~