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;
}

【动态规划】DP搬运工3的更多相关文章

  1. 动态规划dp

    一.概念:动态规划dp:是一种分阶段求解决策问题的数学思想. 总结起来就一句话:大事化小,小事化了 二.例子 1.走台阶问题 F(10):10级台阶的走法数量 所以:F(10)=F(9)+F(8) F ...

  2. 算法-动态规划DP小记

    算法-动态规划DP小记 动态规划算法是一种比较灵活的算法,针对具体的问题要具体分析,其宗旨就是要找出要解决问题的状态,然后逆向转化为求解子问题,最终回到已知的初始态,然后再顺序累计各个子问题的解从而得 ...

  3. 水题大战Vol.3 B. DP搬运工2

    水题大战Vol.3 B. DP搬运工2 题目描述 给你\(n,K\),求有多少个\(1\)到\(n\) 的排列,恰好有\(K\)个数\(i\) 满足\(a_{i-1},a_{i+1}\) 都小于\(a ...

  4. 非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3

    非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3 题目描述 给定两个长度为 \(n\) 的排列,定义 \(magic(A,B)=∑_{i=1}^nmax(Ai,Bi)\) . 现在给定 ...

  5. DP搬运工1 [来自yyy--mengbier的预设型dp]

    DP搬运工1 题目描述 给你 \(n,K\) ,求有多少个 \(1\) 到 \(n\) 的排列,满足相邻两个数的 \(max\) 的和不超过 \(K\). 输入格式 一行两个整数 \(n,K\). 输 ...

  6. 【转】动态规划DP

    [数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...

  7. 动态规划DP的优化

    写一写要讲什么免得忘记了.DP的优化. 大概围绕着"是什么","有什么用","怎么用"三个方面讲. 主要是<算法竞赛入门经典>里 ...

  8. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  9. hdu 2059:龟兔赛跑(动态规划 DP)

    龟兔赛跑 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

随机推荐

  1. Linux:配置apache支持php

    对apache的主配置文件进行修改 vi /application/apache/conf/httpd.conf 1.增加下面内容 AddType application/x-httpd-php .p ...

  2. Git 不能提交空目录?我也是醉了!

    Git 不能提交空目录?我也是醉了! 背景 最近在提交文件时,因为是空的 Maven 项目结构,发现 Git 空目录死活不能提交,还以为是我自己在 .gitignore 文件中忽略了,在网上查了下,原 ...

  3. oracle数据处理之exp/imp

    oracle 导出/导入数据方法一 exp/imp工具:1 将数据库oracle01完全导出,DBA:sys,密码:123456:用户名Scott 密码123456 导出到D:\emp.dmp中 ex ...

  4. 通过Xshell实现socket代理访问公司内网

    首先连接上Server,点击查看---隧道窗格 之后点击转移规则--空白处右键,添加 选择Dynamic,之后选择一个本地没有被占用的端口, 确定 浏览器设置 之后就可以访问公司内部的网站了

  5. Spring 标签纸property

    转载自https://www.cnblogs.com/zzb-yp/p/9968849.html Spring中XML文件配置Bean的简单示例,如下: <bean id="car&q ...

  6. Java随谈(二)对空指针异常的碎碎念

    本文适合对 Java 空指针痛彻心扉的人阅读,推荐阅读时间25分钟. 若有一些Java8 函数式编程的基础可以当成对基础知识的巩固. 一.万恶的null 今天,我们简单谈谈null的问题.因为null ...

  7. Docker:四、Docker进阶 Windows Docker IIS 部署

    前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...

  8. MIT 6.S081 xv6调试不完全指北

    前言 今晚在实验室摸鱼做6.S081的Lab3 Allocator,并立下flag,改掉一个bug就拍死一只在身边飞的蚊子.在击杀8只蚊子拿到Legendary后仍然没能通过usertest,人已原地 ...

  9. 解决 SecureCRT 和 SecureFX 中文乱码

    引言 最近老是有小伙伴给我发消息说,下载的 SecureCRT 和 SecureFX 安装打开后连接了自己的服务器或虚拟机后会出现中文乱码,每次都要给一一回复,我倒没事,主要是有时候因为工作的原因,所 ...

  10. Azure 内容审查器之文本审查

    内容审查器 Azure 内容审查器也是一项认知服务.它支持对文本.图形.视频进行内容审核.可以过滤出某些不健康的内容,关键词.使你的网站内容符合当地的法律法规,提供更好的用户体验. 文本内容审核 其中 ...