info: { blogIcon: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogUser: 'OIerBoy', blogAvatar: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogStartDate: '2023-04-22', webpageTitleOnblur: '(o?v?)ノ Hi', webpageTitleOnblurTimeOut: 1000, webpageTitleFocus: '(*′?`*) 欢迎回来!', webpageTitleFocusTimeOut: 1000, webpageIcon: "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/blog_logo.webp", { enable: true, // 是否开启日/夜间模式切换按钮 auto: { // 自动切换相关配置 enable: false, // 开启自动切换 dayHour: 5, // 日间模式开始时间,整数型,24小时制 nightHour: 19 // 夜间模式开始时间,整数型,24小时制 } } },

Different Subsets For All Tuples

Different Subsets For All Tuples

2023-09-09

题目

Different Subsets For All Tuples

难度&重要性(1~10):8.5

题目来源

luogu

题目算法

组合数学

解题思路

这道题很明显的一个点就是我们不可能一个一个的枚举序列。
考虑枚举子序列的长度来计算它在那些序列中出现过。
设当前子序列长度为 \(i\),那么子序列就有 \(m^i\) 种情况,我们记子序列表示为:\(a_1,a_2,a_3,\cdots,a_i\)。那么我们需要保证子序列不会重复出现,就需要要求子序列在原序列中的位置是出现最早的。
为了保证这一点,那么在 \(a_1\) 之前不能出现 \(a_1\) 这个数字,在 \(a_1\sim a_2\) 之间不能再出现 \(a_2\)以此类推。这就保证了子序列出现的最早了,那么有多少种填法能?
我们记 \(j\) 表示 \(a_i\) 的位置是 \(j\)。
我们知道,在 \(a_i\) 后面的数字随便填,有 \(m^{n-j}\) 种情况。
而在 \([1,j]\) 之中有 \(j-i\) 个空位可以填,每一个空位都只有一个数字是不能填写的,就有 \((m-1)^{j-i}\) 种情况,而子序列 \(a_1,a_2\cdots,a_{i-1}\) 在 \([1,j-1]\) 这之中有需要填 \(i-1\),就有 \(C_{j-1}^{i-1}\) 种方案。
这样,得到式子:\(\sum\limits_{i=1}^nm^i\sum\limits_{j=i}^nC_{j-1}^{i-1}(m-1)^{j-i}m^{n-j}\)。
好了,接下来就可以好好的推逝子了。

\[\begin{aligned} & \sum\limits_{i=1}^nm^i\sum\limits_{j=i}^nC_{j-1}^{i-1}(m-1)^{j-i}m^{n-j}\\ = & \sum\limits_{i=1}^n\sum\limits_{j=i}^nC_{j-1}^{i-1}(m-1)^{j-i}m^{n-j+i}\\ = & \sum\limits_{j=1}^n\sum\limits_{i=1}^jC_{j-1}^{i-1}(m-1)^{j-i}m^{n-j+i}\\ = & \sum\limits_{j=0}^{n-1}\sum\limits_{i=0}^{j-1}C_{j-1+1}^{i-1+1}(m-1)^{(j+1)-(i+1)}m^{n-(j+1)+(i+1)}\\ = & \sum\limits_{j=0}^{n-1}\sum\limits_{i=0}^{j-1}C_{j}^i(m-1)^{j-i}m^{n-j+i}\\ = & \sum\limits_{j=0}^{n-1}m^{n-j}\sum\limits_{i=0}^{j-1}C_j^i(m-1)^{j-i}m^i\end{aligned} \]

这样我们就可以达到什么呢?
让我们简单复习一下二项式定理:\((x+y)^n = \sum\limits_{k=0}^{n-1} C_n^k x^k y^{n-k}\)
那么我们就可以进一步化简一下:

\[\sum\limits_{j=0}^{n-1}m^{n-j}\sum\limits_{i=0}^{j-1}C_j^i(m-1)^{j-i}m^i=\sum\limits_{j=0}^{n-1}m^{n-j}(2m-1)^j \]

这样我们就可以直接算了。
时间复杂度为 \(O(n)\)。

完成状态

已完成

posted @ 2023-09-09 14:24  OIerBoy  阅读(27)  评论(0)    收藏  举报