模拟6 题解
A. 那一天我们许下约定#
在写出来复杂度为O(nmd)的简单dp后,我们考虑优化。
题中D的范围远大与N和M,
我们在dp的过程中,很多一个饼干都不给的天数是无效的一天。
于是我们dp出用i的有效天分完n个饼干的方案数,
然后把这i个有效天分配到d天里即可。
ans= \sum \limits_{i=1}^{n} dp(i,0)* \binom{d}{i}
B. 那一天她离我而去#
一个暴力的思路是,将所有与起点相连的边删除,从这些相连的点跑到其他相连点的最短路尝试更新答案。
可以尝试优化这个暴力思路。
发现这个算法有一部分冗余,我们可以分组进行最短路。
因为任意两个不同的点,二进制一定至少存在一位不同。
我们以每个二进制位的0,1进行分组,
每组点组成的环一定被至少一次更新,于是可以达到目的。
复杂度O(m log^2n)
C. 哪一天她能重回我身边#
考虑将题意转化为一个图。
即我们将每张牌的反面对应数字向正面建边。
我们的目标转化为:
求翻转最少的边数,使每个点的入度都不大于1,并求出方案数。
dp即可。
对于每个联通块:
设n为点数,m为边数。
1.联通块是树,即
m=n-1
以任意一点为根节点,尝试使除根节点外的点入度为1,得到根此时的最少翻转次数。
换根dp,即可得到其它点作根节点的翻转次数。
2.联通块是基环树,即
m=n
基环树一定为外向基环树,尝试使环上的点顺时针或逆时针,
不在环上的点直接树形dp即可。
3.联通块是不可能做到每个点入度不大于1,即
m>n
循环直接跳出,输出无解。
最终我们的最小翻转次数是每个联通块的最小翻转次数求和,
所对应的方案数是每个联通块达到最小的方案数求乘积。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具