UPD:修了点锅(啊昨天居然写脑抽了)

题目内容

给定两个长度为 \(n\) 的序列,定义 \(magic(A,B)=\sum\limits_{i=1}^n \max(A_i,B_i)\)。

现在给定 \(n,K\) 问有多少对 \((A,B)\) 满足 \(magic(A,B)\geq K\)。

结果 \(\mathrm{mod}\ 998244353\)。

思路

关于数据太水导致特判大法直接AC这件事重评了

关于两重排列,可以将 \(B\) 序列固定为 \(1、2、3\dots n\),最后方案数乘上 \(n!\) 。因为实际上最后变换的就是每一对的位置。然后考虑填 \(A\) 序列。

设 \(f[i][j][k]\) 表示当前填完了 \(1\) ~ \(i\) 的数,其中有 \(j\) 个数填到了下标为 \(i+1\) ~ \(n\) 的位置,\(k\) 为所有 \(\max\{ a[p],b[p] \}\leq i\) 中 \(\max\{ a[p],b[p] \}\) 的和的方案数。

转移分类讨论:

  1. 若将 \(i\) 填到了下标 \(i\) ,则k+=i

  2. 若将 \(i\) 填到了下标小于 \(i\) 的位置,下标 \(i\) 的位置填入了小于 \(i\) 的数,则k+=2*ij--

  3. 若将 \(i\) 填到了下标小于 \(i\) 的位置,下标 \(i\) 的位置填入了大于 \(i\) 的数,则k+=i

  4. 若将 \(i\) 填到了下标大于 \(i\) 的位置,下标 \(i\) 的位置填入了小于 \(i\) 的数,则k+=i

  5. 若将 \(i\) 填到了下标大于 \(i\) 的位置,下标 \(i\) 的位置填入了大于 \(i\) 的数,则j++

其中1、3、4是可以合并的,添加方案数就为2*j+1

然后最后答案为\(\sum_{x\geq K} f[n][0][x]\)

其实你在转移的时候把大于 \(K\) 的都加在 \(K\) 里,就不用再求和了。

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=50+10;
const int Mod=998244353;
int n,K;
long long ans;
int f[maxn][maxn][maxn*maxn]; int main(){
#ifndef LOCAL
freopen("D.in","r",stdin);
freopen("D.out","w",stdout);
#endif
scanf("%d%d",&n,&K);
f[0][0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=i;j++)
for(int k=0;k<=K;k++){
long long G=f[i-1][j][k];
f[i][j][min(k+i,K)]=(f[i][j][min(k+i,K)]+(2*j+1)*G%Mod)%Mod;//1&3&4
f[i][j+1][k]=(f[i][j+1][k]+G);//5
if(j)f[i][j-1][min(k+2*i,K)]=(f[i][j-1][min(k+2*i,K)]+j*j*G%Mod)%Mod;//2
}
ans=f[n][0][K];
for(int i=2;i<=n;i++)
ans=ans*i%Mod;
printf("%lld\n",ans);
return 0;
}

最新文章

  1. Java - 网络编程
  2. mariadb配置允许远程访问方式
  3. Apache Commons DbUtils Problem
  4. POJ 2352 Stars 树阵
  5. win10 平台 elasticsearch 与 elasticsearch-head 的安装
  6. 基于python的种子搜索网站-项目部署
  7. 【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数
  8. Maven捆绑TestNG实现测试自动化执行、部署和调度
  9. k8s
  10. 依赖注入原理---IoC框架
  11. 一步步配置cordova android开发环境
  12. 用了皮肤控件之后,报错:容量超出了最大容量 参数名:capacity
  13. 概率论与数理统计 Q&amp;A:
  14. 1975: [Sdoi2010]魔法猪学院
  15. MySQL解决[Err] 1206 - The total number of locks exceeds the lock table size问题
  16. Linux 踩坑记录
  17. [JSOI2009]计数问题 二维树状数组
  18. DotNETCore 学习笔记 WebApi
  19. linux学习总结---web前端③
  20. noip2017集训测试赛(三) Problem B: mex [补档]

热门文章

  1. SSM框架中添加写日志功能
  2. Tomcat配置SSL
  3. 如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
  4. 5分钟掌握企业LVM磁盘划分
  5. jenkins结合cygwin软件实现从centos发布代码rsync到windows server2019的过程
  6. 仿苏宁移动web页面 自适应 rem&less
  7. hystrix源码之请求合并
  8. Java List 常用集合 ArrayList、LinkedList、Vector
  9. 龙芯3a4000办公机安装软件及美化记录
  10. Java多线程--CAS