码迷,mamicode.com
首页 > 其他好文 > 详细

ICPC 沈阳 Problem C

时间:2018-10-22 13:03:14      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:line   like   lin   个数   icp   产生   思考   重复   problem   

题意

求n的全排列中将前k个数排序后最长公共子序列>=n-1的个数

思考

我们先把最后可能产生的结果找出来,再找有多少种排列能构成这些结果

设排列为s

  • S like 1,2,3,...,n , 个数=1
  • S like 1,2,3, ... i-1, j, i, ... j-1, j+1, ...n
    • 当j<=k时不存在
    • 当j>k时, 个数= (j-1)-k+1=j-k
    • 综上,个数=\(\Sigma_{j=k+1}^{n}j-k\)
  • S like 1,2,3,...i-1, i+1, ..j,i,j+1..n
    • 当j<=k时,个数=n-(k+1)+1=n-k
    • 当j>k时, 个数= n-(j+1)+1=n-j
    • 综上, 个数=\(k(n-k)+\Sigma_{j=k+1}^{n}n-j\)
  • 但是 S like 1,2,3,...,i+1,i,...被重复计算了,个数=n-(k+1)+1=n-k
  • 综上,结果数=1+k(n-k)+(n-k)^2-(n-k)=1+(n-1)(n-k)

又因为对于每种结果可以由k!个排列构成

所以最后答案是 [1+(n-1)(n-k)]k! , k<=n

ICPC 沈阳 Problem C

标签:line   like   lin   个数   icp   产生   思考   重复   problem   

原文地址:https://www.cnblogs.com/Merodach/p/9829344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!