首页 > 其他分享 >P7 UVA11481 Arrange the Numbers

P7 UVA11481 Arrange the Numbers

时间:2023-08-25 20:33:05浏览次数:36  
标签:UVA11481 P7 int 放在 Numbers 错排 Arrange

UVA11481 Arrange the Numbers

组合数问题。

做法貌似很多,显然在前 \(m\) 个数中选 \(k\) 个,即 \(C(m,k)\),然后后面有 \(m-k\) 个数需要保证不放在自己的位置上,所以后面整体是一个禁位问题,貌似可以用棋盘多项式去推禁位公式,但是暂时不会。不过还有另外一种思路,就是对于后面的 \(n-m\) 个 “自由数”,可以考虑枚举有多少数放在原位,这样显然可以包含所有情况,那么对于剩下的就是经典的错排问题了。复杂度为 \(O(n^2+Tn)\),OK。

关于错排递推公式 \(D(n)=(n-1)*[D(n-1)+D(n-2)]\) 的证明:考虑第 \(n\) 个数可以放在 \(1 \sim n-1\) 这些位置上,比如放在第 \(i\) 位,那么对于 \(i\) ,如果把它放在 \(n\) 这个位置上,那么就变成了 \(D(n-2)\) 这个位置;如果把它放在其它位置上,发现实际上其本质就变成了 \(D(n-1)\) 这个问题。

当然错排公式也可以由容斥定理推出 \(D(n)=n!\sum^n_{i=0} \frac{1}{i!}*(-1)^i\) 。

const int N=1005,mod=1e9+7;

ll fac[N],d[N],c[N][N];

signed main(){
  IOS
  fac[0]=1;
  for(int i=1;i<=1000;++i) fac[i]=fac[i-1]*i%mod;
  c[0][0]=1;
  for(int i=1;i<=1000;++i){
    c[i][0]=1;
    for(int j=1;j<=i;++j)
      c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
  }//combinatorial number

  d[0]=1,d[1]=0;
  for(int i=2;i<=1000;++i)
    d[i]=(d[i-1]+d[i-2])%mod*(i-1)%mod;

  int T;
  cin>>T; int n,m,k;
  for(int kase=1;kase<=T;++kase){
    cin>>n>>m>>k; ll ans=0;
    for(int i=0;i<=n-m;++i) ans=(ans+d[m-k+i]*c[n-m][i]%mod)%mod;
    cout<<"Case "<<kase<<": "<<ans*c[m][k]%mod<<'\n';
  }
  
  return 0;
}

· EOF

标签:UVA11481,P7,int,放在,Numbers,错排,Arrange
From: https://www.cnblogs.com/mfc007/p/17657869.html

相关文章

  • 吃透这份阿里P7大佬整理的《Android Framework源码笔记》,还怕找不到工作?
    前言随着Android开发行业的快速发展,市场需求也在不断提升,导致低端Android开发市场就业大环境不好、行业趋势下滑,使得不少初中级的Android开发开始失业,找不到工作。对于大部分的开发者来说,找不到工作的一大部分原因,是因为AndroidFramework无法做到精通。想要成为真正的高级Androi......
  • LuoguP7637 [BalticOI 2006 Day 1] BITWISE EXPRESSIONS
    题目大意给定\(N\)对数据,每对数据包含两个整数\(A_i\)和\(B_i\),表示这一对数据的\(v_i\)的范围:\(A_i\leqv_i\leqB_i\)。又将这\(N\)对数据分为\(P\)组,其中\(K_i\)表示第\(i\)组数据中有多少对数据。我们设第\(i\)组数据中将所有数按位与的结果为\(X_i\),求......
  • 由P7914括号序列(A题)引发的关于区间DP的思考
    和CF149DColoringBrackets(B题)一样,都是关于括号的区间DP。在B题中,有一个细节,就是在枚举断点时枚举到第一个就要break,这是为了使每种方案只贡献一次,防止一种方案中有多个符合条件的断点。此题中,因为序列的字符是不变的,所以直接break就行了。但是在A题中,情况变得比较复杂,比如一......
  • Linux 下php7.2安装mysql扩展
    环境CPU:x86_64OS:CentOSLinuxrelease7.5php:7.2.34pdo_mysql:7.2.34安装进入安装包mysql扩展目录进入到php安装包(php-7.2.34.tar.gz)的解压目录php-7.2.34中的扩展目录,准备进行编译cd/opt/php-7.2.34/ext/pdo_mysql编译安装mysql扩展这个过程3步执行:--with......
  • PPT| 企业架构TOGAF 4A 架构规划方法 P74
    PPT共74页,由于篇幅有限,以下为部分资料.......
  • p7付费课程笔记7:G1 GC
    前言上次我们讲了CMSGC,这次我们讲解G1GC;在开始之前我们要思考下我们为什么学G1GC?学习后有什么好处?成为更好的Java开发工程师,在遇到服务性能问题、GC问题时,能够通过了解到的G1知识快速定位、解决相关问题在面试时GC问题也是常问的知识点,G1GC作为大多数工程师了解不是很多的知识......
  • 「题解注释」P7518 [省选联考 2021 A/B 卷] 宝石
    联合省选2021宝石题解-hezlik的博客-洛谷博客(luogu.com.cn)耗时:一晚上+半个上午代码注释:#include<bits/stdc++.h>usingnamespacestd;constintN=500000,C=21;intRi(){intx=0,y=1;charc=getchar();for(;c<'0'||c>'9';c=getchar())if......
  • P7438 更简单的排列计数 题解
    前置芝士:伯努利数等幂求和。其中伯努利数\(B_i\)的生成函数为\(\frac{x}{e^x-1}\)。首先这种逆序对有个套路的dp:令\(f_{i,j}\)表示填了前\(i\)个数,逆序对为\(j\),这时排列的\(val_{\pi}\)的乘积之和。有转移:\(f_{i,j}=\sum\limits_{k=0}^{i-1}f_{i-1,j-k}i^k\),初始......
  • P7092 计数题 题解
    前置题目:P5748集合划分计数。我们令\(Bell_n\)表示将\(n\)个有标号的球划分为若干集合的方案数。且\(Bell_n=n![x^n]e^{e^x-1}\)。首先,当\(k=0\)时,\(\mu(S)=0\),答案为\(0\)。当\(k=1\)时,\(\mu(S)=(-1)^{|S|},\varphi(S)=\prod\limits_{x\inS}(x-1)\)。记\(\pi(S)......
  • 洛谷 P7739 - [NOI2021] 密码箱
    感觉难度和今年D2T2差不多。首先一个很显然的事情是,每一步得到的分数的分子分母都是互质的,证明参考SBT。而最后答案要求我们将分子分母都求出来而不是求分数值,所以可以很明显的想到将分数当成一个二元组然后维护变换。考虑从右往左扫,假设当前分数为\(\dfrac{x}{y}\),那么扫过......