首页 > 其他分享 >解一类二维递推

解一类二维递推

时间:2023-08-08 17:34:52浏览次数:37  
标签:fr sum gather xF 二维 一类 binom 递推

解一类二维递推

WC 2021 讲课题为例

the following recurrence comes from WC2021
有n个桶和2n − 1个球,其中第i个桶可以装前2i − 1个球,一个
桶只能装一个球问有多少种方案取m个桶,再取m个球,再将这些球分别放在一个桶里;

暴力是下面递推式

	f[0][0]=1;
	fr(i,1,n)fr(j,0,n)f[i][j]=(j?(2i-j)*f[i-1][j-1]:0)+f[i-1][j];

要解出来,题解用的bijective proof.但是现在有暴力方法了

solution 1

idea from https://ac.nowcoder.com/acm/contest/57356/J

first change the index and it is equivalent to solve

f[0][0]=1
fr(i,1,n)fr(j,0,n)f[i][j]=(i+j)f[i-1][j]+(j?f[i-1][j-1]:0)

let \(F_i\) be the ogf. of \(f_{ij}\)

\[\begin{gather} F_i=(i+\vartheta)F_{i-1}+xF_{i-1}\\ F_n=\prod_{i=1}^n(i+\vartheta+x) ~ 1\\ =\sum_k {n+1 \brack k+1} (x+\vartheta)^k ~ 1\\ F_n[x^m]=\sum_k {n+1 \brack k+1} {k\brace m}\\ = \sum_k {n+1 \brack k+1} \frac{1}{m!}\sum_i \binom{m}{i}i^k(-1)^{m-i}\\ =\frac{1}{m!} \sum_i \binom{m}{i}\prod_{k=1}^n(i+k)(-1)^{m-i}\\ =\frac{n!}{m!}\sum_i\binom{i+n}{i}\binom{m}{i}(-1)^{m-i}\\=(n-m)!\binom{n}{m}^2 \end{gather} \]

so originally \(f_{nm}=m!\binom{n}{m}^2\)

solution 2

from https://www.luogu.com.cn/blog/command-block/hdu-duo-xiao-2023-round6-1007-competition

\[\begin{gather} F_i=iF_{i-1}+xF_{i-1}'+xF_{i-1}\\ e^xF_i=x(e^xF_{i-1})'+ie^xF_{i-1}\\ H_i=xH_{i-1}'+iH_{i-1}\\ h_{i,j}=(i+j)h_{i-1,j}=\binom{i+j}{i} \end{gather} \]

之后类似上面

标签:fr,sum,gather,xF,二维,一类,binom,递推
From: https://www.cnblogs.com/pigpigger/p/17614965.html

相关文章

  • php中计算二维数组中某一元素之和
    [0] => array(5){    ["id"] => string(2) "11"    ["name"] => string(5) "1.jpg"    ["suffix"] => string(3) "jpg"    ["url"] => string(29) "./Uploads/1/5292f55d208e......
  • 二维数组排序,按其中某项排序
    /** * 二维数组排序 * @param $arrays         目标数组 * @param $sort_key       要排序的键 * @param int $sort_order 升序|降序 * @param int $sort_type  数字|字符串|通常 * @return $arrays         */function ......
  • 递推算法例题C++
    1、移动路线【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明......
  • C关于一维数组以及二维数组的创建和简单利用(下)
    #include<stdio.h>intmain(){inta[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};intb=0;for(b=0;b<3;b+=1){intc=0;for(c=0;c<4;c+=1){printf("%p||",&a[b][c]);......
  • C语言定义并初始化一个二维数组(利用二级指针)
    C语言定义并初始化一个二维数组(利用二级指针)1.代码如下#include<stdio.h>#include<stdlib.h>intmain(){//m,n表示数组的行数和列数intm,n;scanf("%d%d",&m,&n);//p是一个二级指针,使用malloc函数初始化。注意p指向的是一个指针,所以sizeof操作......
  • C语言定义并初始化一个二维数组(利用指针数组)
    C语言定义并初始化一个二维数组(利用指针数组),可以实现二位数组的每一行的元素个数不同1.代码如下#include<stdio.h>#include<stdlib.h>intmain(){//arr是一个指针数组,即这个数组的所有元素都是指针,每一个元素都指向一个int型数组,每一个int型数组的长度可以不同......
  • 「学习笔记」二维数点
    P2163[SHOI2007]园丁的烦恼-洛谷|计算机科学教育新生态(luogu.com.cn)这个是二维数点的板子题,二维数点这一类题目就是上面的题所描述的,我们用树状数组+离散化来解决这个问题。这里就不解释了,记录此篇博文的目的主要就是提醒自己曾经学过这个,看看代码,方便回忆起来。这......
  • qrcode生成二维码
    jsqrcode包生成二维码安装npminstall--saveqrcode或者,全局安装以便从命令行保存qrcode图像或生成您可以在您的终端中查看的图像。npminstall-gqrcode使用importQRCodefrom"qrcode"letcode="string....";QRCode.toDataURL(code,{errorCorrect......
  • 实现二维卷积层
    importtorchfromtorchimportnnfromd2limporttorchasd2ldefcorr2d(x,k):"""计算二维互相关运算"""#获取卷积核的高和宽h,w=k.shape#输出的高和宽y=torch.zeros((x.shape[0]-h+1,x.shape[1]-w+1))foriinrange(y.shape[0......
  • C关于一维数组以及二维数组的创建和简单利用(上)
    第一段代码#include<stdio.h>#include<String.h>intmain(){inta[]={1,2,3,4,5,6,7,8,9,10};intb=sizeof(a)/sizeof(a[0]);intc=0;for(c=0;c<b;c+=1){printf("&a[%d]=%p\n",c,&a[c]);}......