首页 > 其他分享 >资本(生成函数)

资本(生成函数)

时间:2024-09-26 19:49:25浏览次数:7  
标签:资本 le frac 函数 int sum 生成 quad

$\quad $ 其中 $n\le 1e3 $ 、$ m\le 1e9 $ 、 $ T\le 10 $。

$\quad $ 这是一个排列问题,所以我们可以考虑指数型生成函数,这里我们称 \(x ^n\) 的系数为 \(\frac{x ^n}{n!}\) 之前的系数,下文记作 \([x ^n]\) 。

$\quad $ 我们定义函数 \(f _{k}(x)=\sum _{n=0}^{k}\frac{x ^n}{n!}\) ,那么 \([x^n]\) 表示选其中 \(n\) 个数(可重)且该数出现次数不超过 \(k\) 时的合法方案数。

$\quad $ 那么 \([x^n]e _{k}^{m}(x)\) 就表示在 \(m\) 个数中选出 \(n\) 个数(可重),使得每个选出的数出现次数都不超过 \(k\) 的方案数。

$\quad $ 那么 \([x^n]e_{k}^{m}(x)-[x^n]e _{k-1}^{m}(x)\) 就表示在 \(m\) 个数中选出 \(n\) 个数(可重),使得众数为 \(k\) 的方案数。

下文的 \([x^n]\) 代指 \(x^n\) 之前的系数。

$\quad $ 答案就是:

\[n!\sum _{k=1}^{n}k([x^n]e ^{m}_{k}(x)-[x^n]e ^{m}_{k-1}(x)) \]

再化简一下:

\[n!(n[x^n]e ^{m}_{n}(x)-\sum _{k=1}^{n-1}[x^n]e ^{m} _{k}(x)) \]

$\quad $ 现在再考虑求出 \([x^n]e _{k}^{m}(x)\)

首先对 \(e ^m_{k}(x)\) 求导,这里用到了复合函数的求导,(简单写了,不是很严谨)即:

对于两个函数 \(f(x)、g(x)\) ,令 \(h(x)=f[g(x)]\) ,则 \(h'(x)=f'[g(x)] g'(x)\)

书上给的

如果 \(u=g(x)\) 在点 \(x\) 处可导,而 \(y=f(u)\) 在点 \(u=g(x)\) 处可导,那么复合函数 \(y=g[f(x)]\) 在点 \(x\) 处可导,且其导数为

\[\frac{dy}{dx}=f'(u)\cdot g'(x) \]

这里我们可以把 \(e ^m_{k}(x)\) 看做是 $f(x)=x^m $ 和 \(g(x)=e _{k}(x)\) 的复合函数

那么:

\[(e ^{m}_{k}(x))'=me ^{m-1}_{k}(x)e'_{k}(x) \]

现在看看 \(e'_{k}(x)\) ,因为 \(e _{k}(x)=\sum _{i=0}^{k}\frac{x^i}{i!}\) ,故 \(e'_{k}(x)=\sum _{i=1}^{k}\frac{x ^{i-1}}{(i-1)!}=\sum _{i=0}^{k-1}\frac{x^i}{i!}=e _{k}(x)-\frac{x^k}{k!}\) 。

所以:
\begin{aligned}
(e ^{m}_{k}(x))'&=me ^{m-1} _{k}(x) e' _{k} (x)\\
&=me ^{m-1} _{k}(x)(e _{k} ^{m}(x)-\frac{x ^k}{k!})\\
&=m e ^{m} _{k}(x)-\frac{mx ^k}{k!}e _{k} ^{m-1}(x)\\
\end{aligned}

那么对于其 \(n\) 次项系数,该等式仍然成立。

也就是:

\[[x^n](e ^{m}_{k}(x))'=[x^n]m e ^{m} _{k}(x)-\frac{mx ^k}{k!}[x ^{n-k}]e _{k} ^{m-1}(x) \]

此时设 \(e _{k} ^{m}(x)=\sum _{n=0}^{m}A(n,m)x^n\) ,那么可知 \([x^n](e ^{m}_{k}(x))' =(n+1)A(n+1,m)\)

于是:

\[(n+1)A(n+1,m)=mA(n,m)-\frac{m}{k!}A(n-k,m-1) \]

$\quad $ 再化成我们熟悉的递推式:

\[iA(i,j)=jA(i-1,j)-\frac{j}{k!}A(i-k-1,j-1) \]

$\quad $ 当 \(m=1\) 时,该式的值为 \(\frac{1}{n!}\) , \(n=0\) 时,该式的值为 \(1\) , \(n\le 0\) 时则为 \(0\) 。

然后愉快递推就好了,时间复杂度 \(O(n ^2 log n)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
const int N=1e3+10,p=1e9+7;
int fact[N],n,m,t,ny[N],nyp[N],k,f[N][N];
inline int qum(int a,int b){
	int ans=1;
	while(b){
		(b&1)&&(ans=ans*a%p);
		a=a*a%p;
		b>>=1;
	}
	return ans;
}
signed main(){
	// freopen("1.in","r",stdin);
    freopen("capital.in","r",stdin);
    freopen("capital.out","w",stdout);
	scanf("%lld",&t);fact[0]=1;
	for(int i=1;i<=1000;i=-~i)fact[i]=fact[i-1]*i%p;
	ny[1000]=qum(fact[1000],p-2);
	for(int i=999;i;i--)ny[i]=ny[i+1]*(i+1)%p;
    for(int i=1;i<=1000;i=-~i)nyp[i]=fact[i-1]*ny[i]%p;
	while(t--){
		scanf("%lld%lld",&n,&m);
		int ans=0;
		for(int i=1;i<=n+1;i++)f[0][i]=1;
		for(k=1;k<=n;k=-~k){
			f[k][1]=ny[k];
			int op=n/k+1,d=m-op;
			for(int i=1;i<=op;i=-~i){
				for(int j=1;j<=k;j=-~j){
					f[j][i]=nyp[j]*(i+d)%p*f[j-1][i]%p;
				}
				for(int j=k+1;j<=n;j++){
					f[j][i]=nyp[j]*(i+d)%p*(f[j-1][i]-ny[k]*f[j-k-1][i-1]%p+p)%p;
				}
			}
            ans=(k^n)?(ans+f[n][m-d])%p:(n*f[n][m-d]%p-ans+p)%p;
		}
		ans=ans*fact[n]%p;
		printf("%lld\n",ans);
	}
}

《唐完了》,5k一语惊醒梦中人。

标签:资本,le,frac,函数,int,sum,生成,quad
From: https://www.cnblogs.com/0shadow0/p/18433751

相关文章

  • 免费AI写作搭配数据采集,一键生成多篇文章
     简数采集器可快速采集大量丰富的数据信息,供免费AI写作接口使用,一键批量生成多篇原创文章。目前支持的免费AI写作接口有:百度文心一言、阿里通义千问、Kimi大模型、字节跳动豆包、讯飞星火大模型等。详细操作方法如下:1.开通并接入AI写作接口1)首先,开通合适的AI写作API......
  • Kotlin:变量声明,null安全,条件语句,函数,类与对象
    目录一,变量声明1.1var和val1.2 类型推断1.3 Null安全1.3.1处理可为null性二,条件语句2.1条件语句与条件表达式2.2 智能类型转换三,函数3.1简化函数声明3.2匿名函数3.3高阶函数四,类与对象4.1构造函数4.1.1主构造函数4.1.2次构造函数一,变量声明1.1......
  • 红黑树|定义、左旋函数、右旋函数和对插入结点的修复
    红黑树|定义、左旋函数、右旋函数和对插入结点的修复1.红黑树类的定义2.左旋函数和右旋函数3.对插入结点的修复1.红黑树类的定义enumclassColor{ RED, BLACK};template<typenameKey,typenameValue>classRedBlackTree{ classNode { public: Key......
  • 18937 阿克曼(Ackmann)函数
    ###思路1.**递归定义**:根据阿克曼函数的定义,使用递归来计算函数值。2.**递归终止条件**:  -当`m==0`时,返回`n+1`��  -当`m>0`且`n==0`时,返回`ackermann(m-1,1)`。  -当`m>0`且`n>0`时,返回`ackermann(m-1,ackermann(m,n-1)......
  • 【YashanDB知识库】decode函数中的子查询被不必要地多次执行
    本文内容转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7441387.html?templateId=1718516问题现象客户向yashandb下发的SQL语句执行时间超过6分钟仍未出结果问题的风险及影响SQL语句性能慢,影响客户业务问题影响的版本所有的yashandb22.2版本23.2版本没有这个问......
  • c语言中fork,exec和system函数的理解
    fork用于创建子进程。由fork创建的新进程被称为子进程(childprocess)。fork函数被调用一次,但返回两次。在父进程中,fork返回新创建子进程的进程ID。在子进程中,fork返回0。如果出现错误,fork返回一个负值。包含在<unistd.h>中,是Unix系统特有的文件(Macos并不太清楚),因此需要......
  • [算法] 次小生成树与单源次短路
    发现NOIP大纲里有这个,所以写一写次小生成树分为严格次小生成树和非严格次小生成树,前者要求此生成树的权值和严格大于最小生成树,后者是非严格大于;对于这个问题,我们首先求出原图的最小生成树,然后发现次小生成树是最小生成树只删一条边,然后加一条边得到的,于是我们可以枚举要加的......
  • transformers中的generate函数解读
    转载:https://zhuanlan.zhihu.com/p/654878538这里仅当学习记录,请看原文,排版更丰富转载补充:https://www.likecs.com/show-308663700.html 这个非常的清晰明了,也建议前往学习今天社群中的小伙伴面试遇到了一个问题,如何保证生成式语言模型在同样的输入情况下可以保证同样的输出......
  • AI跨时空拥抱合成视频爆火,AI图生图,图生视频操作简单。AI视频生成器
    目前AI跨越时空拥抱的视频爆火,以ai拥抱为例,可以看到这类型的视频,流量都不低。 AI项目玩法有很多,例如:AI生成肖像视频、老照片视频、拥抱视频、AI原创视频、搞笑视频、图转视频、AI二次元视频。AI项目玩法逻辑玩法一:获取使用AI小程序,生成视频,发布视频作品到各平台,吸粉......
  • python使用win32gui、win32con窗口函数功能及参数意义
    使用python设置窗口显示、最大化、最小化、隐藏的时候,需要win32gui.ShowWindow(hwnd,win32con.SW_HIDE),那么对于的参数如下:ShowWindow函数的参数有:1.hWnd:窗口句柄,用于标识要操作的窗口;2.nCmdShow:指定窗口如何显示,可以是以下值:SW_HIDE:隐藏窗口并**其他窗口。nCmdShow=0。SW_......