【学习笔记】[AGC021F] Trinity

有点难😅

考虑加入每一列,发现我们只关心当前还未确定的行的数目

有点难算😅

d p i , j dp_{i,j} dpi,j表示有 i i i列,其中 j j j行未确定的方案数。钦定每一列至少有一个黑色格子。

d p i , j = j ( j + 1 ) 2 d p i − 1 , j + ∑ k ≥ 1 ∑ k ≤ l ≤ j ( j − l + 1 ) ( l k ) d p i − 1 , j − k dp_{i,j}=\frac{j(j+1)}{2}dp_{i-1,j}+\sum_{k\ge 1}\sum_{k\le l\le j}(j-l+1)\binom{l}{k}dp_{i-1,j-k} dpi,j=2j(j+1)dpi1,j+k1klj(jl+1)(kl)dpi1,jk

暴力 D P DP DP的复杂度为 O ( N 3 M ) O(N^3M) O(N3M),考虑优化

发现可以看成从 j + 2 j+2 j+2个数中选 k + 2 k+2 k+2个数的方案数,上面的式子其实是在枚举倒数第二个被选中的数的位置。

d p i , j = j ( j + 1 ) 2 d p i − 1 , j + ∑ k < j ( j + 2 k ) d p i − 1 , k dp_{i,j}=\frac{j(j+1)}{2}dp_{i-1,j}+\sum_{k<j}\binom{j+2}{k}dp_{i-1,k} dpi,j=2j(j+1)dpi1,j+k<j(kj+2)dpi1,k

这样优化到了 O ( N 2 M ) O(N^2M) O(N2M)

将组合数拆成阶乘的形式,可以用多项式优化。

复杂度 O ( N M log ⁡ N ) O(NM\log N) O(NMlogN)

#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define pb push_back
#define db double
#define inf 0x3f3f3f3f
using namespace std;
const int mod=998244353;
const int N=8005;
const int M=205;
int n,m;
ll dp[N],res;
ll fac[N],inv[N];
ll fpow(ll x,ll y=mod-2){ll z(1);for(;y;y>>=1){if(y&1)z=z*x%mod;x=x*x%mod;}return z;
}
void init(int n){fac[0]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;inv[n]=fpow(fac[n]);for(int i=n;i>=1;i--)inv[i-1]=inv[i]*i%mod;
}
ll binom(int x,int y){if(x<0||y<0||x<y)return 0;return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
void add(ll &x,ll y){x=(x+y)%mod;
}
int len;
ll invlen;
ll omega[N<<2][2];
void ntt(vector<ll>&a,int len,int f=0){int k=0;while((1<<k)<len)k++;for(int i=0;i<len;i++){int t=0;for(int j=0;j<k;j++){if(i>>j&1)t+=(1<<k-j-1);}if(i<t)swap(a[i],a[t]);}for(int l=2;l<=len;l<<=1){int k=l/2;ll x=omega[l][f];for(int i=0;i!=len;i+=l){ll y=1;for(int j=0;j<k;j++){ll tmp=a[i+j+k]*y%mod;a[i+j+k]=(a[i+j]-tmp)%mod;a[i+j]=(a[i+j]+tmp)%mod;y=y*x%mod;}}}if(f)for(int i=0;i<len;i++)a[i]=a[i]*invlen%mod;
}
struct poly{vector<ll>a;friend poly operator *(poly a,poly b){ntt(a.a,len),ntt(b.a,len);for(int i=0;i<len;i++)a.a[i]=a.a[i]*b.a[i]%mod;ntt(a.a,len,1);return a;}
}f,g;
signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m,init(max(n,m)+2);dp[0]=1;len=1;while(len<=2*(n+2))len<<=1;invlen=fpow(len);omega[len][0]=fpow(3,(mod-1)/len);omega[len][1]=fpow(3,mod-1-(mod-1)/len);for(int i=len/2;i;i>>=1){omega[i][0]=omega[i<<1][0]*omega[i<<1][0]%mod;omega[i][1]=omega[i<<1][1]*omega[i<<1][1]%mod;}g.a.resize(len);for(int i=3;i<=n+2;i++)g.a[i]=inv[i];add(res,1);for(int i=1;i<=m;i++){f.a.clear(),f.a.resize(len);for(int j=0;j<=n;j++)f.a[j]=dp[j]*inv[j]%mod;f=f*g;for(int j=0;j<=n;j++){dp[j]=(j*(j+1)/2*dp[j]%mod+f.a[j+2]*fac[j+2])%mod;}for(int j=0;j<=n;j++)add(res,dp[j]*binom(n,j)%mod*binom(m,i));}cout<<(res+mod)%mod;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IGV.js 的完全本地化运行探索

问题及解决方法 IGV.js 完全本地化是为了合规&#xff0c;不使用外网的情况下查看基因组。不联网需要下载 genomes.json 文件及其中的内容之外&#xff0c;还需要修改 igv.js本身&#xff0c;防止5s超时后才显示网页内容。修改的关键词是: genomes.json&#xff0c;改为本地的…

Leetcode-每日一题【剑指 Offer 13. 机器人的运动范围】

题目 地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&#xff0c;也不能进入行坐标和列坐标的数位之和大于k的格子。例…

一个简单实用的线程池及线程池组的实现!

1.线程池简介 线程池&#xff0c;顾名思义&#xff0c;就是一个“池子”里面放有多个线程。为什么要使用线程池呢&#xff1f;当我们编写的代码需要并发异步处理很多任务时候&#xff0c;一般的处理办法是一个任务开启一个线程去处理&#xff0c;处理结束后释放线程。可是这样…

【QT】窗口通过dragEnterEvent和dropEvent拖拽导入文件

【QT】窗口通过dragEnterEvent和dropEvent拖拽导入文件 界面允许接受拖拽 在界面的构造函数中设置接受拖拽放置文件 setAcceptDrops(true); 拖拽进入、放下事件 dragEnterEvent函数对拖动的文件进行过滤&#xff0c;如果不符合过滤条件按将无法拖拽进入窗口 dropEvent函数…

支付总架构解析

一、支付全局分层 一笔支付以用户为起点&#xff0c;经过众多支付参与者之后&#xff0c;到达央行的清算账户&#xff0c;完成最终的资金清算。那么我们研究支付宏观&#xff0c;可以站在央行清算账户位置&#xff0c;俯视整个支付金字塔&#xff0c;如图1所示&#xff1a; 图…

[保研/考研机试] KY135 又一版 A+B 浙江大学复试上机题 C++实现

题目链接&#xff1a; KY135 又一版 AB https://www.nowcoder.com/share/jump/437195121691736185698 描述 输入两个不超过整型定义的非负10进制整数A和B(<231-1)&#xff0c;输出AB的m (1 < m <10)进制数。 输入描述&#xff1a; 输入格式&#xff1a;测试输入包…

小米200万LOGO设计的前端实现技术详解

引言 小米是一家知名的科技公司&#xff0c;拥有众多粉丝。其标志性的LOGO是小米200万像素的文字LOGO&#xff0c;给人留下了深刻的印象。本文将详细介绍小米200万LOGO的前端设计实现技术&#xff0c;包括HTML、CSS和JavaScript的使用&#xff0c;以及展示最多的代码示例。 设…

mysql使用redis+canal实现缓存一致性

一、开启binlog日志 1.首先查看是否开启了binlog show variables like %log_bin%; 如果是OFF说明位开启 2、开启binlog日志&#xff0c;并重启mysql服务 右键我的电脑——管理——服务——MYSQL——属性 这里是my.ini地址 在[mysqld]底下添加 log-bin mysqlbinlog binlog-f…

c#设计模式-创建型模式 之 工厂模式

前言&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09;是一种常用的对象创建型设计模式。该模式的主要思想是提供一个创建对象的接口&#xff08;也可以是抽象类、静态方法等&#xff09;&#xff0c;将实际创建对象的工作推迟到子类中进行。这样一来&#xff0c…

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks 链接&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…

Spring-2-深入理解Spring 注解依赖注入(DI):简化Java应用程序开发

今日目标 掌握纯注解开发依赖注入(DI)模式 学习使用纯注解进行第三方Bean注入 1 注解开发依赖注入(DI)【重点】 问题导入 思考:如何使用注解方式将Bean对象注入到类中 1.1 使用Autowired注解开启自动装配模式&#xff08;按类型&#xff09; Service public class StudentS…

HTTP 协议的基本格式和 fiddler 的用法

目录 一. HTTP 协议 1. HTTP协议是什么 2. HTTP协议的基本格式 HTTP请求 首行 GET和POST方法&#xff1a; 其他方法 经典面试题&#xff1a; URL Header(请求报头)部分 空行 ​HTTP响应 状态码总结: 二、Fiddler的用法 1.Fidder的安装 2.Fidder的使用 一. HTTP 协议 1. H…

解决macOS执行fastboot找不到设备的问题

背景 最近准备给我的备用机Redmi Note 11 5G刷个类原生的三方ROM&#xff0c;MIUI实在是用腻了。搜罗了一番&#xff0c;在XDA上找到了一个基于Pixel Experience开发的ROM&#xff1a;PixelExperience Plus for Redmi Note 11T/11S 5G/11 5G/POCO M4 Pro 5G (everpal)&#xf…

TMC Self-Managed 提升跨多云环境安全性

作为云原生技术栈的关键技术之一&#xff0c;Kubernetes 被企业用户广泛试用并开始支撑实际业务应用运行&#xff0c;实现技术先进性带来的生产力提升。但与此同时&#xff0c;随着 Kubernetes 技术的不断广泛与深化使用&#xff0c;企业用户也开始面临诸多技术上的挑战&#x…

嵌入式:ARM Day1

1. 思维导图 2.作业一 3.作业2

Android T 窗口层级其二 —— 层级结构树的构建(更新中)

如何通过dump中的内容找到对应的代码&#xff1f; 我们dump窗口层级发现会有很多信息&#xff0c;adb shell dumpsys activity containers 这里我们以其中的DefaultTaskDisplayArea为例 在源码的framework目录下查找该字符串&#xff0c;找到对应的代码就可以通过打印堆栈或者…

日常BUG —— Java判空注解

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一. 问题描述 问题一&#xff1a; 在使用Java自带的注解NotNull、NotEmpty、NotBlank时报错&#xff0c;…

CentOS8安装Git

错误1. 执行yum命令报错 【错误&#xff1a;Invalid configuration value: failovermethodpriority in /etc/yum.repos.d/CentOS-epel.repo; 配置&#xff1a;ID 为 "failovermethod" 的 OptionBinding 不存在】 1.cd /etc/yum.repos.d 2.vim CentOS-epel.repo //…

背上沉重的书包准备面试之react篇

目录 react特性&#xff1f; react生命周期&#xff1f; state和props区别 react中setState执行机制&#xff1f; 在react类组件形式中&#xff0c;setState第二个参数的作用&#xff1f; react事件机制&#xff1f; react事件绑定方式有哪些&#xff1f; react组件之间…

k8s通过sa和自建角色实现权限精细化分配

文章目录 权限精细化分配---通过sa和自建角色实现权限精细化分配1.新建sa2.建立一个角色&#xff0c;并将该角色绑定到sa上3.授权namespace的权限,设置ClusterRole和ClusterRolebinding 权限精细化分配—通过sa和自建角色实现权限精细化分配 1.新建sa kubectl create sa lish…