当前位置: 首页 > 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.gsyq.cn/news/59594.html

相关文章:

  • 2025年11月美国本科申请机构深度测评:藤校Offer领航者全解析
  • 踩坑日记20251124
  • 详细介绍:Nginx 高效动静分离:从原理到实战
  • C++语法基础
  • 2025美国留学中介实测榜单:从藤校到小众专业,核心竞争力深度对比!
  • 2025美国留学机构TOP榜:从申请到就业的全链条护航者
  • MySQL 数据备份 - 教程
  • 复制 deepseek think 思考 内容 的方法
  • 狂神说Java(基础版)
  • 2025优质留学中介全景推荐:从藤校OFFER到职业落地,谁是你的专属引路人?
  • zhengrui 喵了个喵
  • C#.NET PeriodicTimer 深入解析:高效异步定时器的正确打开方式 - 详解
  • 2025年11月留学机构实测:5家实力留学机构推荐,细分领域王牌都在这!
  • zhengrui 种花
  • 俄罗斯黑客承认协助阎罗王勒索软件入侵企业网络
  • [ImGui游戏设置UI模拟实践] ImGui Learn Data Day 2
  • 深入解析:java设计模式七、代理模式
  • Trick——语法
  • 老鼠和奶酪 记忆化搜索
  • 深入解析:数独解题算法lua脚本
  • Trae搭建Android 开发中 MVVM 架构,使用指南
  • CF2061H2 Kevin and Stones (Hard Version) 题解
  • winfrom 操作列 动态按钮
  • 蓝桥杯-Python-基础语法
  • 高性能AI股票预测分析报告 - 2025年11月24日 - 20:46:52
  • 博客园真好用
  • 增强AI股票预测分析报告 - 2025年11月24日 - 20:43:55
  • 102302106-陈昭颖-第三次作业
  • 2025 年 11 月 GEO 公司推荐权威榜单:十大品牌价值内核与实战解决方案盘点
  • 2025 年 11 月 GEO 公司推荐权威榜单:十大品牌核心优势与定制化解决方案指南