【AGC005D】~K Perm Counting(计数抽象成图)

server/2024/10/20 15:02:26/

容斥原理。

求出f(m) ,f(m)指代至少有m个位置不合法的方案数。

怎么求?

注意到位置为id,权值为v ,不合法的情况,当且仅当 v = id+k或 v= id-k

因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一条边,可以构成二分图。

借用大佬的图。

由此可知,当选了n条边,就恰好n个位置不合法,限制条件是:连的边不能相邻,

把二分图展开成k条链,进行dp。

还是借用大佬ez_lcw的图

由此总共有2n 个点 k 条链,链与链之间无边 互不干涉。

dp(i,j,pd)表示考虑到第i号点, 连了j条边,是否有连接i 到 i-1号点。

转移方程

dp(i,j,0) = dp(i-1,j,0)+dp(i-1,j,1)

dp(i,j,1) = dp(i-1,j-1,0)

则可得f(m) = (n-m)!\times (dp(2n,m,0) + dp(2n,m,1)) 

简单的乘法原理罢了。

ans = \sum _{i = 0} f(m)*(-1)^1

#include<bits/stdc++.h>
using namespace std;
long long n,k;
long long fac[4010];
long long dp[4010][4010][2];
int mod = 1e9+7;
int pd[4999];//判断是否为链头 0 表示是头 头不能连接上一个 
int main(){freopen("neverk.in","r",stdin);freopen("neverk.out","w",stdout);cin>>n>>k;fac[0] = 1;for(int i = 1;i <= n;i++){fac[i] = (fac[i-1]*(long long)i)%mod;}int tot = 0;for(int i=1;i<=k;i++){for(int t=0;t<2;t++){for(int j=i;j<=n;j+=k){tot++;if(i!=j) pd[tot]=1;}}}dp[0][0][0] = 1;for(int i = 1;i <= 2*n;i++){for(int j = 0;j <= n;j++){dp[i][j][0] = (dp[i-1][j][0] + dp[i-1][j][1])%mod;if(j&&pd[i]) dp[i][j][1] = dp[i-1][j-1][0];}}long long cnt = 0;for(int i = 0;i <= n;i++){//cout<<fac[n-i]<<" "<<dp[2*n][i][0]+dp[2*n][i][1]<<endl;long long t = fac[n-i]*(dp[2*n][i][0]+dp[2*n][i][1]);t%=mod;//cout<<t<<endl;if(i%2 == 0){cnt = (cnt +t)%mod;}else{cnt = (cnt - t + mod)%mod;}}cout<<cnt;return 0;
}


http://www.ppmy.cn/server/127984.html

相关文章

Spring IoC笔记

目录 1.什么是 IoC&#xff1f; 2.IoC类注解&#xff08;五大注解&#xff09; 2.1那为什么要这么多类注解&#xff1f; 2.2五大注解是不是可以混用&#xff1f; 2.3程序被spring管理的条件是&#xff1f; 3.bean对象 3.1Bean 命名约定 3.2获取bean对象 4.⽅法注解 B…

STM32 OLED

文章目录 前言一、OLED是什么&#xff1f;二、使用步骤1.复制 OLED.C .H文件1.1 遇到问题 2.统一风格3.主函数引用头文件3.1 oled.h 提供了什么函数 4.介绍显示一个字符的函数5. 显示十进制函数的讲解 三、使用注意事项3.1 配置符合自己的引脚3.2 花屏总结 前言 提示&#xff…

TIM“PWM”输出比较原理解析

PWM最重要的就是占空比&#xff0c;所有都是在为占空比服务&#xff0c;通过设置不同的占空比&#xff0c;产生不同的电压&#xff0c;产生不同的效果 定时器的输出通道 基本定时器&#xff1a; 基本定时器没有通道 通用定时器&#xff1a; 4个通道&#xff08;CH1, CH2, C…

【JWT安全】portswigger JWT labs 全解

目录 1.利用有缺陷的 JWT 签名验证 ①接受任意签名 lab1:通过未验证的签名绕过 JWT 身份验证 ②接受无签名的token lab2:通过有缺陷的签名验证来绕过 JWT 身份验证 2.暴力破解密钥 ①使用hashcat lab3:通过弱签名密钥绕过 JWT 身份验证 3.JWT 标头参数注入 ①通过 jwk…

Hive数仓操作(三)

一、Hive 数据库操作 1. 创建数据库 基本创建数据库命令&#xff1a; CREATE DATABASE bigdata;说明&#xff1a; 数据库会在 HDFS 中以目录的形式创建和保存&#xff0c;数据库名称会存储在 Hive 的元数据中。如果不指定目录&#xff0c;数据库将在 /user/hive/warehouse 下…

使用PaddleHub智能生成,献上浓情国庆福

使用PaddleHub完成国庆祝福 祝福国家繁荣 本项目作为示例演示项目&#xff0c;用于体验飞桨平台的高效与便利。 各部分详细内容请点击相应链接学习 数据介绍 数据集收集自网络&#xff0c;包括100条国庆祝福。数据以txt形式提供&#xff0c;一条数据为一行。 国庆佳节&#x…

Python异常处理中的9个常见错误及其解决办法,建议收藏

在Python编程中&#xff0c;异常处理是确保程序健壮性和可靠性的重要部分。然而&#xff0c;在使用异常处理时&#xff0c;开发者可能会犯一些常见的错误。以下是9个常见的异常处理错误及其解决办法&#xff1a; 1. 语法错误 (SyntaxError) 语法错误是最常见的错误之一。它通…

数字图像处理:空间域滤波

1.数字图像处理&#xff1a;空间域滤波 1.1 滤波器核&#xff08;相关核&#xff09;与卷积 图像上的邻域计算 线性空间滤波的原理 滤波器核&#xff08;相关核&#xff09;是如何得到的&#xff1f; 空间域的卷积 卷积&#xff1a;滤波器核与window中的对应值相乘后所有…