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

CF1799G Count Voting 笔记

容斥好题。

发现本题限制有点多,其中棘手的是不能投给自己阵营的人,不然考虑每个人投给了谁,最终答案就是一个可重集的排列数。

于是考虑容斥,考虑求出至少有 \(i\) 人投给了自己阵营的人的方案数。

那么可以做背包,设 \(f_{i,j}\) 表示考虑前 \(i\) 组,至少有 \(j\) 人投给了自己组,设 \(g(i,k)\) 表示第 \(i\) 组至少有 \(k\) 人投给自己组的方案数,\(d_i\) 表示第 \(i\) 组有几个人,则有

\[f_{i,j}=\sum_{k}^{\min(j,d_i)}f_{i-1,j-k}\times g(i,k) \]

于是问题在于求 \(g(i,k)\),显然这个和组外无关,于是考虑第 \(p\) 组,可以设 \(g_{i,j}\) 表示考虑组内前 \(i\) 个人,至少有 \(j\) 个人投给了自己阵营的方案数,那么可以拆解成两个部分:投自己投给了谁?投别人投给了谁?

投自己投给了谁是好算的,就是从自己组还没被投的那些人中选若干个出来,即

\[g_{i,j}=\sum_{k}^{\min(j,d_i)}g_{i-1,j-k}\times \binom{d_p-(j-k)}k \]

但是投别人投给了谁?这个不好算,考虑最终的 \(f_{m,j}\)\(m\) 是组数),如果我们知道第 \(i\) 组有 \(a_i\) 个人投给了自己组(\(\sum a_i=j\)),那么就可以用可重集排列数:

\[\frac{(n-j)!}{\prod(c_i-a_i)!} \]

DP 无法支持记录 \(a_i\) 到结束,但是发现分子和第 \(i\) 组无关,于是考虑 DP 的时候只记录分母的部分,那么转移方程就变成了

\[g_{i,j}=\sum_{k}^{\min(j,d_i)}g_{i-1,j-k}\times \binom{d_p-(j-k)}k\times \frac 1{(c-k)!} \]

并且令最终的 \(f(m,i)\) 乘上 \((n-i)!\),于是容斥即可。

时间复杂度,实现的好每一部分 DP 都可以 \(n^2\),但是我感觉算 \(g\) 只能是 \(O(n^3)\) 的,求大佬捶,但是题解都说整体 \(O(n^2)\)。空间复杂度 \(O(n^2)\)

http://www.jsqmd.com/news/49752/

相关文章:

  • 2025年11月美国本科申请机构深度测评:藤校Offer领航者全解析
  • 20251124 - 月度检测 总结
  • 2026美国硕士留学中介推荐:从背景提升到签证获批全程护航!
  • 踩坑日记20251124
  • 2025年度楼梯厂商推荐榜单与选择指南:一份基于行业专业数据的权威分析报告,整木/实木/原木等材质楼梯十大主流供应商解析
  • Consciousness Preservation and Synthetic Life
  • 详细介绍:Nginx 高效动静分离:从原理到实战
  • C++语法基础
  • 2025美国留学中介实测榜单:从藤校到小众专业,核心竞争力深度对比!
  • MySQL 数据备份 - 教程
  • 复制 deepseek think 思考 内容 的方法
  • 狂神说Java(基础版)
  • 2025优质留学中介全景推荐:从藤校OFFER到职业落地,谁是你的专属引路人?
  • 第一章语法基础__C++
  • 11月 月度检测 总结
  • zhengrui 喵了个喵
  • C#.NET PeriodicTimer 深入解析:高效异步定时器的正确打开方式 - 详解
  • 2025.11.24
  • Scrum冲刺阶段 Day One
  • 2025年11月留学机构实测:5家实力留学机构推荐,细分领域王牌都在这!
  • 兄弟们关于mysql的看法你们怎么看
  • ASP.NET Core Blazor简介和飞快入门三(布局和路由)
  • 11/24
  • zhengrui 种花
  • 俄罗斯黑客承认协助阎罗王勒索软件入侵企业网络
  • 2025年11月口碑好的钢骨架聚乙烯塑料复合管厂家推荐排行榜哪家好
  • [ImGui游戏设置UI模拟实践] ImGui Learn Data Day 2
  • 深入解析:java设计模式七、代理模式
  • 《程序员修炼之道:从小工到专家》阅读笔记4
  • 单智能体系统