非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3
非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3
题目描述
给定两个长度为 \(n\) 的排列,定义 \(magic(A,B)=∑_{i=1}^nmax(Ai,Bi)\) 。
现在给定 \(n\),\(K\) 问有多少对 \((A,B)\) 满足 \(magic(A,B)≥K\)。
分析
首先转化一下,我们固定排列 \(B\) 为 $1∼n $,最后答案乘个 \(n!\) 就好了
我们设 \(f[i][j][k]\) 为 考虑到第 \(i\) 个位置,\(i\) 之前有 \(j\) 个位置没有填,当前产生的价值为 \(k\) 的方案数
我们可以选择在 \(i\) 的位置不填数,此时直接转移即可
\(f[i][j+1][k]=f[i][j+1][k]+f[i-1][j][k]\)
我们可以把当前的 \(i\) 插入到之前没有填过的 \(j\) 个位置或者从之前没有用过的 \(j\) 个数中选择一个填到 \(i\) 所在的位置,还可以把数字 \(i\) 填入 \(i\) 的位置
此时的转移方程为
\(f[i][j][k+i]=f[i][j][k+i]+f[i-1][j][k] \times (j \times 2+1)\)
我们还可以既把当前的 \(i\) 插入到之前没有填过的 \(j\) 个位置又从之前没有用过的 \(j\) 个数中选择一个填到 \(i\) 所在的位置,此时
\(f[i][j-1][k+i+i]=f[i][j-1][k+i+i]+f[i-1][j][k] \times j \times j\)
代码
#include<cstdio>
#include<algorithm>
const int maxn=55;
const int mod=998244353;
long long f[maxn][maxn][maxn*maxn];
int n,k;
int main(){
freopen("D.in","r",stdin);
freopen("D.out","w",stdout);
scanf("%d%d",&n,&k);
f[1][0][1]=f[1][1][0]=1;
for(int i=2;i<=n;i++){
int maxj=std::min(i-1,n-i+1);
int maxk=i*i;
for(int j=0;j<=maxj;j++){
for(int k=0;k<=maxk;k++){
if(f[i-1][j][k]){
f[i][j+1][k]=(f[i][j+1][k]+f[i-1][j][k])%mod;
f[i][j][k+i]=(f[i][j][k+i]+f[i-1][j][k]*(j*2LL+1))%mod;
if(j) f[i][j-1][k+i+i]=(f[i][j-1][k+i+i]+f[i-1][j][k]*j*j*1LL)%mod;
}
}
}
}
long long ans=0;
for(int i=k;i<=n*n;i++){
ans=(ans+f[n][0][i])%mod;
}
for(int i=2;i<=n;i++){
ans=ans*1LL*i%mod;
}
printf("%lld\n",ans);
return 0;
}
非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3的更多相关文章
- 非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串
非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串 题目描述 \(JYY\)有两个长度均为\(N\)的字符串\(A\)和\(B\). 一个"扭动字符串\(S(i,j,k)\)由\( ...
- 非确定性有穷状态决策自动机练习题Vol.2 C. 奇袭
非确定性有穷状态决策自动机练习题Vol.2 C. 奇袭 题目描述 由于各种原因,桐人现在被困在\(Under World\)(以下简称\(UW\))中,而\(UW\)马上 要迎来最终的压力测试--魔界 ...
- [火星补锅] 非确定性有穷状态决策自动机练习题Vol.3 T3 && luogu P4211 [LNOI2014]LCA 题解
前言: 这题感觉还是很有意思.离线思路很奇妙.可能和二次离线有那么一点点相似?当然我不会二次离线我就不云了. 解析: 题目十分清真. 求一段连续区间内的所有点和某个给出的点的Lca的深度和. 首先可以 ...
- [火星补锅] 非确定性有穷状态决策自动机练习题Vol.1 T3 第K大区间 题解
前言: 老火星人了 解析: 很妙的二分题.如果没想到二分答案.. 很容易想到尝试用双指针扫一下,看看能不能统计答案. 首先,tail指针右移时很好处理,因为tail指针右移对区间最大值的影响之可能作用 ...
- 水题大战Vol.3 B. DP搬运工2
水题大战Vol.3 B. DP搬运工2 题目描述 给你\(n,K\),求有多少个\(1\)到\(n\) 的排列,恰好有\(K\)个数\(i\) 满足\(a_{i-1},a_{i+1}\) 都小于\(a ...
- goroutine 分析 协程的调度和执行顺序 并发写 run in the same address space 内存地址 闭包 存在两种并发 确定性 非确定性的 Go 的协程和通道理所当然的支持确定性的并发方式(
package main import ( "fmt" "runtime" "sync" ) const N = 26 func main( ...
- AC自动机练习题1:地图匹配
AC自动机板子,学习之前要是忘记了就看一下 1465: [AC自动机]地图匹配 poj1204 时间限制: 1 Sec 内存限制: 256 MB提交: 78 解决: 46[提交] [状态] [讨论 ...
- Vue兄弟组件(非父子组件)状态共享与传值
前言:网上大部分文章写的有点乱,很少有讲得易懂的文章. 所以,我写了篇在我能看得懂的基础上又照顾到大家的文章 =.= 作者:X1aoYE 备注:此文原创,转载请注明~ 内容里的<br> ...
- 非确定性计算引擎转化为C#版本并重构
这是之前我写的原始的 VB.NET 版本: http://www.cnblogs.com/RChen/archive/2010/05/17/1737587.html 转化为 C# 版本后,还进行了一些 ...
随机推荐
- idea2020安装教程
2019最新版IDEA亲测可用, 2020最新版IDEA亲测可用, 重要的事说三遍: 如果自己破解不成功建议加群咨询群主:422167709 成功的也可以进群交流 激活码1 N757JE0KCT- ...
- [转]十分钟带你理解Kubernetes核心概念
本文将会简单介绍 Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些 ...
- 容器centos7安装部署ansible
容器centos7安装部署ansible centos镜像版本及ansible版本 centos:centos7.5.1804 ansible:2.9.11 启动容器并进入容器 docker run ...
- 蒲公英 · JELLY技术周刊 Vol.16 谷歌首个线上 Web 开发者大会
蒲公英 · JELLY技术周刊 Vol.16 近期,谷歌有史以来的第一次线上谷歌 Web 开发者大会,Web Vitals.PWA.DevTools 和 Lighthouse 6.0 等一系列特性或产 ...
- Webpack 原理浅析
作者: 凹凸曼 - 风魔小次郎 背景 Webpack 迭代到4.x版本后,其源码已经十分庞大,对各种开发场景进行了高度抽象,阅读成本也愈发昂贵.但是为了了解其内部的工作原理,让我们尝试从一个最简单的 ...
- Python os.openpty() 方法
概述 os.openpty() 方法用于打开一个新的伪终端对.返回 pty 和 tty的文件描述符.高佣联盟 www.cgewang.com 语法 openpty()方法语法格式如下: os.open ...
- Python os.closerange() 方法
概述 os.closerange() 方法用于关闭所有文件描述符 fd,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略.高佣联盟 www.cgewang.com 语法 clo ...
- PDOStatement::setFetchMode
PDOStatement::setFetchMode — 为语句设置默认的获取模式.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0)高佣联盟 www.cgewang. ...
- ElasticSearch学习中的坑
elasticsearch 版本为 6.8.2 1 安装完启动报错: 解决,建立新用户执行 [root@localhost bin]# ./elasticsearch [2019-09-01T05 ...
- Docker入坑指南之RUN
总有一些场景,我们需要自己制作一个镜像,可以快速还原环境,又不想被其他因素干扰镜像的纯净,这个时候,就可以选择Docker了,启动便捷,镜像还原很快捷,除了上手不容易. 最近入坑研究了一番,小有心得, ...