当前位置: 首页 > news >正文

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

容斥原理。

求出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.lryc.cn/news/458539.html

相关文章:

  • 【React】setState (useState) 是怎么记住上一个状态值的?
  • Vue3 使用CryptoJS加密
  • Feign的使用
  • 前端反接保护:实用方案解析与探讨
  • 【C++】第五节:内存管理
  • 【Java SE】方法 和 递归 的应用
  • JVS低代码轻应用是什么?是如何拼装的?这篇文章讲的非常详细
  • K210(openMV)与STM32 通信教程
  • 【HarmonyOS】HMRouter使用详解(三)生命周期
  • Docker 教程三 (Ubuntu Docker安装)
  • Redis:持久化
  • 精准监控,高效运营 —— 商品信息实时分析为商家带来新机遇
  • Nginx应用配置实战
  • html实现倒计时
  • HTMLCSS练习
  • LeetCode讲解篇之377. 组合总和 Ⅳ
  • Midjourney中文版:创意无限,艺术之旅由此启程
  • 安装R和RStudio:开始你的数据分析之旅
  • 如何使用python连接数据库?
  • 停车位识别数据集 图片数量12416张YOLO,xml和txt标签都有; 2类类别:space-empty,space-occupied;
  • MySQL 创建子账号
  • 代码随想录 106. 岛屿的周长
  • 阿里云融合认证中的App端一键登录能力
  • 基于YOLO11/v10/v8/v5深度学习的安检X光危险品检测与识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
  • vue-插槽作用域实用场景
  • Prometheus+Grafana 监控 K8S Ingress-Ningx Controller
  • 如何在Visual Studio 2019中创建.Net Core WPF工程
  • 自然语言处理(NLP)论文数量的十年趋势:2014-2024
  • .net core API中使用LiteDB
  • YOLO_V8分割