题面

传送门

题解

这居然是一道语文题?

首先不难看出,因为每一次相邻元素交换最多减少一个逆序对,所以至少\(m\)次交换就代表这个序列的逆序对个数为\(m\)

我们考虑一下,假设现在已经放完了\(i-1\)个数,当放入第\(i\)个数的时候会对逆序对个数造成什么影响

如果第\(i\)个数放在最后,新增逆序对个数为\(0\),如果插在最后一个数前面,新增逆序对为\(1\)……

综上,第\(i\)个数插入之后新加的逆序对数为\(0,1,...,i-1\)

那么不难看出,新增逆序对数的这个数列,和原序列是有一一对应关系的

那么我们就可以把它写成生成函数的形式了,题目转为求

\[\prod_{k=1}^n\left(\sum_{i=0}^{k-1}x^i\right)\]

的第\(m\)次项的系数

然后就要开始推倒了

\[\prod_{k=1}^n\left(\sum_{i=0}^{k-1}x^i\right)=\prod_{k=1}^n{1-x^k\over 1-x}=\left(1\over 1-x\right)^n\prod_{k=1}^n(1-x^k)\]

所以直接上多项式即可

我们来考虑两个柿子的组合意义

\({1\over 1-x}=\sum_{i=0}^\infty x^i\),那么\(\left(1\over 1-x\right)^n\)的第\(k\)项系数就代表\(a_1+a_2+...+a_n=k\)的非负整数解的个数,根据隔板法可得它的第\(k\)项系数为\({k+n-1\choose n-1}\)

然后考虑后面那个,可以看做有\(n\)个物品,第\(i\)个物品体积为\(i\),求用这些物品填满体积为\(k\)的背包的方案数,有符号

这就相当于是一个背包,因为背包内部是无序的,所以它等价于求和为\(k\)的严格上升子序列的个数

我们设\(f_{i,j}\)表示长度为\(i\),和为\(j\)的严格上升子序列的个数,然后考虑这玩意儿怎么转移

可以新增一个物品,那么方案数为\(f_{i-1,j-i}\)(先把所有物品\(+1\),再新放入一个\(1\)进去)

也可以不放物品,把所有数\(+1\),方案数为\(f_{i,j-i}\)

不过这样转移可能会有不合法的,因为放的数最大值不能超过\(n\),所以要减去\(f_{i-1,j-(n+1)}\)

记得前面要带上符号

即为

\[f_{i,j} = f_{i,j-i} - f_{i-1,j-i} - (-f_{i-1,j-(n+1)})\]

因为每种体积的物品最多一个,所以放的物品最多不超过\(O(\sqrt{m})\)

那么多项式\(\prod_{k=1}^n(1-x^k)\)第\(i\)项的系数就是\(\sum_j f_{j,i}\)

然后把这两个多项式卷个积就能得到答案了

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=2e5+5,P=998244353;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){R int res=1;for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);return res;
}
int fac[N],ifac[N],f[N],g[N],dp[555][N];
int n,m,res;
inline int C(R int n,R int m){return m>n?0:1ll*fac[n]*ifac[m]%P*ifac[n-m]%P;}
int main(){
//  freopen("testdata.in","r",stdin);scanf("%d%d",&n,&m);fac[0]=ifac[0]=1;fp(i,1,n+m)fac[i]=mul(fac[i-1],i);ifac[n+m]=ksm(fac[n+m],P-2);fd(i,n+m-1,1)ifac[i]=mul(ifac[i+1],i+1);fp(i,0,m)f[i]=C(i+n-1,n-1);dp[0][0]=1,g[0]=1;int d=1;fp(j,2,m)if((1ll*j*(j+1)>>1)>=m){d=j;break;}fp(i,1,d){fp(j,0,m){j>=i?dp[i][j]=dec(dp[i][j-i],dp[i-1][j-i]):0;j>=n+1?dp[i][j]=add(dp[i][j],dp[i-1][j-n-1]):0;}fp(j,0,m)g[j]=add(g[j],dp[i][j]);}fp(i,0,m)res=add(res,mul(f[i],g[m-i]));printf("%d\n",res);return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10560252.html

洛谷T46780 ZJL 的妹子序列(生成函数)相关推荐

  1. 【洛谷 P5850】 calc加强版(生成函数+NTT)

    传送门 先看做无序的最后乘上 n ! n! n! 显然可以构造生成函数 ∏ ( 1 + i x ) \prod(1+ix) ∏(1+ix) 分治 n t t ntt ntt好像也可以过?不过不知道为啥 ...

  2. 【洛谷P4841】城市规划【指数型生成函数】【麦克劳林级数】【多项式对数】

    传送门 题意:求NNN个点的带标号无向连通简单图的个数. N≤130000N \leq 130000N≤130000 这个问题的主要矛盾在于连通 这个并不好表示,但可以用这个表示出不要求连通的方案数 ...

  3. 【洛谷4389】付公主的背包(生成函数,多项式运算)

    [洛谷4389]付公主的背包(生成函数,多项式运算) 题面 有一个容量最多为\(10^5\)的背包 有\(n\)种物品,数量无限,题解是\(v_i\) 给定一个\(m\),求所有\(s\in[1,m] ...

  4. 栈——验证栈序列(洛谷 P4387)

    题目选自洛谷P4387 是一道栈的题,能够帮助理解栈的更深层次. 题目大意就是判断序列是否可能是对应序列的出栈序列. 如何判断是不是合理的出栈序列呢? 对于序列a 我们依次和序列b来比较,如果不相同, ...

  5. 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)

    点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...

  6. 洛谷P5488 | FFT+生成函数+二项式定理

    前言 因为最近在学习生成函数和多项式有关的内容,很多这方面的东西也不是很懂,所以很多地方可能讲得不好或者是不清楚还请读者们见谅. 那么关于这道题呢,它是我前段时间刚学生成函数时见过的题目.当时由于是刚 ...

  7. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  8. 洛谷千题复习计划(一)(Codeforces + AtCoder)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每天花一个小时简单复习一下我写过的洛谷的题目! 虽然还没有到千题,但是快了(等我复习完这些以后我 lu ...

  9. BZOJ3809: Gty的二逼妹子序列

    BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...

最新文章

  1. GPU端到端目标检测YOLOV3全过程(上)
  2. SharePoint 2007部署过程详细图解之一:准备
  3. 记计算机三级网络技术考试经历(附题库)
  4. 管程,进程及线程之间的区别
  5. F# -- TCP/IP小测试
  6. 访问tomcat manager应用遇到的403 access denied错误
  7. 20159302 《网络攻击与防范》第四周学习总结
  8. 如何打开电脑上的安全策略
  9. noi.ac #289. 电梯(单调队列)
  10. Lesson_6 作业_1 ---- 封装学生类
  11. 写给新入IT的新人们(转载)
  12. csdn专用必杀技----谷歌浏览器插件
  13. SAP中与物料BOM有关的表关联
  14. C++中的LPVOID数据类型
  15. MongoDB凭什么跻身数据库排行前五?
  16. linux ll -hrt,Linux col(每日一令之十六)
  17. 5分钟_SpringBoot集成ES实现存储、查询
  18. css给div四角添加效果
  19. pythonsort参数_Python sort()函数有哪些参数?
  20. Blender学习笔记-印花(decal)贴图

热门文章

  1. CImageList::GetImageInfo取到的bitmap不能用
  2. html纵向排列图片,ppt版式垂直排列标题与文本
  3. 迅雷极速版阻止自动更新(亲自摸索出来,可用)
  4. 将禾赛激光雷达在rviz中采集的点云保存成pcd格式
  5. Java UTC时间与本地时间互相转换
  6. word恢复默认样式
  7. 使用各种姿势舒服的部署微前端项目(上:打包与上传)
  8. 0基础python笔记str/list/tuple/dict
  9. linux里sh命令是做什么的?详解!
  10. 干货 | 七年留美经验,帮你省钱自助游美国