[CF301E] Yaroslav and Arrangements

显然的,一个优秀数列对应的所有良好数列,每一种数的数量都是相同的。考虑借助这一点进行 \(dp\)

那么容易想到 \(dp\) 的三个维度:枚举到第 \(i\) 种数,目前已经加入了 \(j\) 个数,目前有 \(l\) 种良好数列。但是这根本无法转移,考虑进一步发掘性质。我们先做一个定义:

定义 准良好数列 为相邻两项差的绝对值 \(\le 1\) 且首项最小的数列。

那么 显然一个没有相邻两项差为 \(0\) 的准良好数列是良好数列

现在假入我们有一个最大值为 \(i\) 准良好数列,我们要加入一些新数 \(i+1\),那么这些新数必定只能插在相邻两项差为 \(0\) 的空隙(下称为 \(0\) 空隙)中,同时使原先的所有 \(0\) 空隙消失。

我们设原先有 \(i\)\(0\) 空隙,新加入 \(j\) 个数(当然,\(j\) 必须大于等于 \(i\))。那么相当于我们一共有 \(i\) 个桶,在保证每个桶里都至少有一个球的情况下将 \(j\) 个球放入桶中,显然会产生 \(j-i\) 个新 \(0\) 空隙,而可能的放置情况用插板法求得有 \(\binom{j-1}{i-1}\)。所以我们再来一维 \(c\) 表示目前有 \(c\)\(0\) 空隙。

那么我们就有了最终的 \(dp\) 状态 \(f_{i,j,c,l}\),表示枚举到第 \(i\) 个数,加入了 \(j\) 个数,能产生 \(l\) 个满足恰有 \(c\)\(0\) 空隙的准良好序列。那么转移方程即为:

\[f_{i,j,c,l}\to f_{i+1,j+x,x-c,l\times\binom{x-1}{c-1}} \]

看似 \(O(n^5)\),实则由于最后一维跑不满,所以常数小的可怕。

统计答案考虑因为 \(i\) 枚举的是第几种数,至于第一种数是 \(1\)\(2\) 并没有说明,所以:

\[ans=\sum_{i=1}^m(m-i+1)\sum_{j=1}^n\sum_{l=1}^k f_{i,j,0,l} \]

#include<bits/stdc++.h>
using namespace std;
const int N=105,p=1e9+7;
int n,m,k,C[N][N],f[2][N][N][N],ans;
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>m>>k,C[0][0]=1;for(int i=1;i<=n;i++) f[1][i][i][1]=1;for(int i=0;i<=n;C[++i][0]=1)for(int j=1;j<=i;j++) C[i][j]=min(C[i-1][j]+C[i-1][j-1],101);for(int num=1,e=1;num<m;num++,e^=1){for(int i=num;i<=n;i++){for(int j=1;j<=i-num+2;j++) for(int c=1;c<=k;c++) if(f[e][i][j][c])for(int x=j,cc;x+i<=n;x++) if((cc=c*C[x-1][j-1])<=k&&cc)f[e^1][i+x][x-j][cc]=(f[e^1][i+x][x-j][cc]+f[e][i][j][c])%p;for(int j=1;j<=k;j++) ans=(ans+1ll*(m-num+1)*f[e][i][0][j])%p;}memset(f[e],0,sizeof(f[e]));}for(int i=m;i<=n;i++) for(int j=1;j<=k;j++) ans=(ans+f[m&1][i][0][j])%p;return cout<<ans,0;
} 

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

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

相关文章

Go打包dll

1. goland 编写 代码package main/* #include <stdlib.h> */ import "C"//export Add func Add(a, b int) int {return a + b }//export Greet func Greet(v *C.char) *C.char {name := C.GoString(v)return C.CString("Hello from !" + name) } //e…

SpringSecurity5(11-跨域配置)

Spring Security跨域配置通过在WebSecurityConfigurerAdapter中自定义CorsConfiguration实现。可以配置允许的请求来源、请求方法、请求头等,以确保前端与后端之间的安全通信。结合@CrossOrigin注解或CorsFilter进行灵活配置,保障不同源的资源访问权限控制和数据安全。Spring…

AI大模型危机-多维对抗时代的网络安全与隐私困局

文章学习笔记:AI大模型危机-多维对抗时代的网络安全与隐私困局AI发展引发的安全风险与日俱增,加剧了网络安全形式的复杂性。本文剖析了大模型全生命周期安全威胁图谱,揭示数据资源枯竭、隐私泄露、监管滞后等风险问题。 AI大模型驱动网络安全风险”多维裂变“ AI大模型的发展…

CB2401是一款高性能、低功耗可完美替代RFX2401C/AT2401C

CB2401是一款高性能、低功耗的2.4GHz射频前端集成电路(RFIC),专为蓝牙、Zigbee和2.4GHz专有协议无线应用设计。该芯片可完美替代RFX2401C和AT2401C,提供更优的性能和更低的功耗。 主要技术参数核心优势 更高发射功率:+22dBm输出功率,比竞品高出2dB,通信距离更远 更低功耗:…

CH341 Linux驱动 设备驱动连接后又自动关闭

1.uname -r 查看linux版本号2.选择合适内核下的驱动 https://elixir.bootlin.com/linux/v6.8/source/drivers/usb/serial/ch341.c 3.make & make install 4.发现/dev下没有ttyUSB0设备 5.dmesg 发现问题 6043.015612] usb 1-4.2: ch341-uart converter now attached to tty…

会计学-现金流表(三)

介绍 什么是现金流量表?:就是反映你当前现金状况的一个表。 由四个部分构成:期初现金 + 本期流入现金 - 本期流出现金 = 期末现金一个企业或者一个家庭很多时候,即使是落入资不抵债的局面,也未必就会陷入破产,只要他的现金流可以一直维持日常运转,就可以不需要被迫去变卖…

会计学-资产负债表(二)

介绍 什么是资产负债表?:反映的是一家公司或者是一个家庭在某一时刻体量的表。 公式是:资产 = 负债 + 所有者权益。 资产负债表分成左右两栏,左边是资产,右边是负债和权益。 资产表示你的家底有多厚,负债和权益表示这些家底是从哪里来的。会计学上的资产负债表比较复杂的…

王炸!Kafka 4.0 重磅发布,Java 8 和 Zookeeper 彻底被抛弃了,一个时代结束了!

大家好,我是R哥。 Kafka 4.0 终于来了!这次更新可不只是常规的版本优化,而是一次重大架构调整,尤其是不再支持 Java 8,彻底移除了 Zookeeper,正式启用 KRaft 模式,让 Kafka 变得更加独立、高效。 除了这个重磅更新外,Kafka 4.0 还砍掉了一些历史包袱,还带来几个重磅新…

会计学-开篇(一)

介绍 是不是觉得会计学极其枯燥,死板,无趣?因为会计准则本身就是人为设定的游戏规则,整个学习过程感觉就是一直在背诵各种条条框框,完全没有创造性。相比之下,不管是数学,编程,物理学,生物学,投资学,都显得很有意思,这些学科都是帮助我们通向创造。而会计学似乎只会…

会计学-开篇

介绍 是不是觉得会计学极其枯燥,死板,无趣?因为会计准则本身就是人为设定的游戏规则,整个学习过程感觉就是一直在背诵各种条条框框,完全没有创造性。相比之下,不管是数学,编程,物理学,生物学,投资学,都显得很有意思,这些学科都是帮助我们通向创造。而会计学似乎只会…

2 小时,我搭好了“一物一码” 的设备巡检管理系统!

说实话,以前每次看到设备巡检表上那些手写的记录,我就头疼——字迹潦草、容易丢、查起来还费劲。直到昨天下午,我实在忍不了了,决定自己动手搞个"一物一码"的巡检系统。 从零到落地,现在所有设备贴个二维码,手机一扫就能查记录、报故障,还能自动生成报表! 老…