当前位置: 首页 > news >正文

运输货物题解

小 Z 要用 \(n+1\) 只骡子运送 \(k\) 种物资。每只骡子可以任选物资运输(也可以选择运输 \(0\) 种物资)。

由于骡子并不是马,所以 没有任何一种物资能够同时被 第 \(0\sim n-1\) 只这 \(n\) 只骡子运输。

由于骡子并不是马,所以 第 \(1\sim n\) 只 这 \(n\) 只骡子并不能运输全部的 \(k\) 种物资。

根据以上 骡子并不是马 原则,一共有多少种运输方案?
请给出答案 对 \(10^9+7\) 取模的结果。

共有 \(T\) 组测试数据。

数据范围:
对于所有数据,满足 \(0\le T\le 10^5,3\le n,k\le 10^{18}\)

子任务编号 分值 数据范围
\(1\) \(5pts\) \(T=0\)
\(2\) \(25pts\) \(T\le 10,n,k\le 4\)
\(3\) \(35pts\) \(T=1,n,k\le 3000\)
\(4\) \(35pts\) 无特殊限制

题目可以转化为:
求出满足下列条件的 \(n+1\)\(k\) 列的 \(01\) 矩阵的数量:

  • \(n\) 行(第 \(0\sim n-1\) 行)每列至少存在一个 \(0\)
  • \(n\) 行(第 \(1\sim n\))至少有一列全是 \(0\)

可以发现题意简化后,第 \(1\sim n-1\) 行这 \(n-1\) 行需要满足上面两个条件,因此我们把原矩阵拆成第 \(0\) 行、第 \(1\sim n-1\) 行、第 \(n\) 行三部分进行计数。

首先对于第二部分(第 \(1\sim n-1\) 行),我们需要强制规定一些限制,以方便计数,怎么规定呢?

根据条件,我们可以想出:对于第二部分,设有 \(i\) 列全是 \(0\),有 \(j\) 列全是 \(1\)

列只要别选重,时可以随便选的,因此共有 \(\binom{k}{i}\binom{k-i}{j}\) 种选法。对于没有选到的列,我们随便填即可(别填满 \(0\)\(1\) 了),那么 \(k-i-j\) 没选的列共有 \((2^{n-1}-2)^{k-i-j}\) 种合法方案。

然后分别考虑第一三部分。

对于第一部分:
如果有一列第二部分全放了 \(1\),那么第一部分只能放 \(0\),其他的随便放即可,共 \(2^{k-j}\) 种放法。

对于第二部分:
如果有一列已经放了 \(1\),那么我们在第三部分可以随便放,如果有几列全放了 \(0\),那么我们需要至少留一列放 \(0\),共 \(2^{k-i}(2^i-1)\)

把上面那些东西乘在一块就是:

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

这个可以直接 \(\mathcal{O}(k^2)\) 做,但不足以通过本题数据。

我们把能往外放的东西尽量往外放试试,也就是无脑提取公因式:

\[\begin{aligned} YS&=\sum\limits_{i=0}^k\sum\limits_{j=0}^{k-i}\binom{k}{i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}2^{k-i}(2^i-1)\\ &=\sum\limits_{i=0}^k\binom{k}{i}2^{k-i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}2^{-i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j} \end{aligned}\]

注:\(YS=\) 原式。

然后就提不动了,考虑使用公式。

该用哪个呢?

\(\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}\) 这个看上去可以二项式定理化简。

但是后面的 \(2^{k-j}\) 的很难受,如果是 \(2^{k-i-j}\) 就好了,我们需要 \(2^{-i}\)

等等!\(2^{-i}\)?这个我们可以从外面拿回来!

于是

\[\begin{aligned} YS&=2^k\sum\limits_{i=0}^k\binom{k}{i}2^{-i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-i-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}[2(2^{n-1}-2)]^{k-i-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)[2(2^{n-1}-2)+1]^{k-i}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)(2^n-3)^{k-i}\\ &=2^k\left[\sum\limits_{i=0}^k\binom{k}{i}2^i(2^n-3)^{k-i}-\sum\limits_{i=0}^k\binom{k}{i}(2^n-3)^{k-i}\right]\\ &=2^k[(2^n-1)^k-(2^n-2)^k] \end{aligned}\]

\(j\) 所在的那个 \(\sum\) 化简掉之后 \(2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)(2^n-3)^{k-i}\) 看上去不好化简,但实际上可以直接强拆,再分别用二项式定理化简就行了。

最终答案即为

\[2^k[(2^n-1)^k-(2^n-2)^k] \]

这个可以直接用快速幂做。

http://www.gsyq.cn/news/54357.html

相关文章:

  • 2025年青岛暑假预习新高一方案权威推荐榜单:青岛新高一暑假没学习培训/青岛新高三暑假数学方案/青岛新初一衔接班方案服务机构精选
  • 赋能智慧商业:国标GB28181算法算力平台EasyGBS构筑大型商场智慧安防新生态
  • python学习笔记-argparse
  • 2025年湖北皮卡车出租公司权威推荐榜单:湖北出租预警车/湖北出租皮卡车服务精选
  • 建造者-创建型设计模式
  • http和https区别如何转https - 详解
  • 阿里云可观测 2025 年 10 月产品动态
  • linux exit(-1)
  • 奶奶都能看懂的 C++ —— 左值和右值
  • 固废智能分拣项目开发周期
  • 微波烘干设备安全性能:核心技术与应用解析
  • 免费网络研讨会 | 功能安全十步走
  • 能提高免疫力的灵芝品牌哪家好?这份榜单值得关注
  • 展厅装修公司推荐:专业服务与行业标杆企业解析
  • linux exec find
  • linux event
  • 2025年车间降温设备供货厂家权威推荐榜单:冷冻柜/冷风机/滑雪场制冷设备源头厂家精选
  • 2025 年 11 月隔墙厂家推荐排行榜,移动隔墙,推拉隔墙,活动隔墙,办公隔墙,玻璃隔墙,隔音隔墙,吸音板隔墙公司推荐
  • 2025 十大热门工时管理软件深度测评推荐:助力企业攻克工时管理核心痛点
  • 数据手册终极指南
  • 2025北京好的留学中介排名榜
  • 模切机供应商哪家强?国内优质企业实力解析
  • 模切机厂家有哪些?国内优质企业推荐
  • 2025年离心式刮板蒸发器源头厂家权威推荐榜单:蒸发结晶器/刮板薄膜蒸发器/三效废水蒸发器源头设备精选
  • 双非本冲进互联网大厂,太励志了!
  • 推荐几个模切机品牌:国内优质选择及特点解析
  • 33、约束条件
  • 39、MINUS 找出两个 SELECT 语句结果集之间的差集
  • python代码:ffmpeg.probe(视频路径) 出现系统找不到指定文件的问题处理办法
  • 2025年黄麻地毯行业十大品牌权威推荐榜单:环保家居新风向