[硫化铂]守序划分问题

2024-03-16 22:32
文章标签 问题 划分 硫化 守序

本文主要是介绍[硫化铂]守序划分问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

守序划分问题

题目大意

在这里插入图片描述
在这里插入图片描述

题解

Province Team Selection=PTS=PtS=硫化铂,所以就叫这段时间的模拟赛题硫化铂吧。
结论题,我竟然没有想到

首先,既然是结论题,那么有结论,如果我们的一种划分所有集合方案使得 min ⁡ i ∈ S A i ⩾ max ⁡ i ∉ S A i \min_{i\in S}A_i\geqslant\max_{i\not \in S} A_{i} miniSAimaxiSAi,那么一定不合法。
必要性是显然的,因为这样的话属于这两个集合内的集合肯定是不能相邻的,而它们因为无论怎么放,都要求这两个集合的点存分割点,使得需要 min ⁡ i ∈ S A i ⩽ max ⁡ i ∉ S A i \min_{i\in S}A_{i}\leqslant \max_{i\not \in S}A_i miniSAimaxiSAi
充分性也是可以证明的,如果满足这个条件我们一定能给出一种构造方法。
我们可以先将所有的 A A A max ⁡ A i \max A_i maxAi的大小从左往右放置,这样的话 ∀ i ∈ [ 2 , m ] , max ⁡ A p i > min ⁡ A p i − 1 \forall i\in[2,m],\max A_{p_i}>\min A_{p_{i-1}} i[2,m],maxApi>minApi1是一定成立的。
现在我们的问题是可能会有 min ⁡ A p n > max ⁡ A p 1 \min A_{p_n}>\max A_{p_1} minApn>maxAp1。但显然存在 k k k使得 min ⁡ A p k < min ⁡ A p n < max ⁡ A p k < max ⁡ A p n \min A_{p_k}<\min A_{p_n}<\max A_{p_k}<\max A_{p_n} minApk<minApn<maxApk<maxApn,否则我们上面的条件一定不成立,我们可以将 A p n A_{p_n} Apn与它大小上被完全包含的集合的集合当作被割裂出去的集合。
故我们可以将 p k p_k pk p n p_n pn交换一下,使得 max ⁡ A p n \max A_{p_n} maxApn变小,可以发现事实上我们可以不断重复这个过程知道我们的 max ⁡ A p 1 \max A_{p_1} maxAp1可以接上来。
于是我们就构造除了一种合法的方案,也就证明了它的充分性。

现在我们考虑如何统计我们的方案数。
其实上面的结论相当于这 m m m条线段一定是联通的,也就是说,当我们建立新的左端点时,之前已经建立的左端点对应的右端点一定尚未确立下来,否则就不联通了。
我们从小到大,将一个一个数逐步加入线段。
我们定义 d p i , j , k dp_{i,j,k} dpi,j,k表示枚举到第 i i i个点,已经确立了 j j j条线段的左端点,其中有 k k k条的右端点尚未确立。
转移比较好想,枚举这个点是用来新建立线段,不做端点地加入一条线段,或者作为一条线段的右端点,就行了。只要新线段成立时左端点不是所有左端点都右端点就好。

时间复杂度 O ( n m 2 ) O\left(nm^2\right) O(nm2)

源码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 505
#define lowbit(x) (x&-x)
#define reg register
#define pb push_back
#define mkpr make_pair
#define fir first
#define sec second
typedef long long LL;
typedef unsigned long long uLL; 
typedef long double ld;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int mo=998244353;
const int mod=1e5+3;
const int inv2=5e8+4;
const int jzm=2333;
const int zero=20000;
const int n1=1000;
const int M=100000;
const int orG=3,ivG=332748118;
const long double Pi=acos(-1.0);
const double eps=1e-12;
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){_T f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}x*=f;
}
template<typename _T>
void print(_T x){if(x<0){x=(~x)+1;putchar('-');}if(x>9)print(x/10);putchar(x%10+'0');}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int add(int x,int y,int p){return x+y<p?x+y:x+y-p;}
void Add(int &x,int y,int p){x=add(x,y,p);}
int qkpow(int a,int s,int p){int t=1;while(s){if(s&1)t=1ll*t*a%p;a=1ll*a*a%p;s>>=1;}return t;}
int n,m,dp[2][MAXN][MAXN],ans;
signed main(){freopen("partition.in","r",stdin);freopen("partition.out","w",stdout);read(n);read(m);dp[0][1][1]=1;int now=0,las=1;for(int i=2;i<=n;i++){swap(now,las);for(int j=1;j<=min(i,m);j++)for(int k=1;k<=j;k++){if(k)Add(dp[now][j][k-1],1ll*k*dp[las][j][k]%mo,mo);Add(dp[now][j+1][k+1],dp[las][j][k],mo);Add(dp[now][j][k],1ll*k*dp[las][j][k]%mo,mo);if(k)Add(dp[now][j+1][k],dp[las][j][k],mo);}for(int j=1;j<=min(i,m);j++)for(int k=0;k<=j;k++)dp[las][j][k]=0;}printf("%d\n",dp[now][m][0]);return 0;
}

谢谢!!!

这篇关于[硫化铂]守序划分问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816929

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例