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

硬币购物

挺难的,乍一看限制条件很多,难做。

试试把子问题拆解成小问题:

共有 \(1\) 种硬币。面值为 \(c_1\)。不限制使用次数,请问每次有多少种付款方法?

这样变成了裸的完全背包,直接 \(O(n)\) 解决。但是原问题怎么写啊?我也不知道啊 qwq

满足条件的方案总数 不好求,但是 不满足条件的方案总数 可以求,那么只要 方案总数 - 不满足条件的方案总数 = 满足条件的方案总数!

怎样是非法的呢?那就是取的硬币数量 \(sum>d_i\),即一旦 \(sum=d_i+1\),那么接下来不论怎么取硬币都是非法方案。

那强制令体积为 \(s-c_i \cdot (d_i+1)\) 时所有方案都是非法的,此时状态转移方程好推,

\[ans=dp_s-dp_{s-c_i \cdot (d_i+1)} \]

即我们把不合法方案看做 \(4\) 个集合,要求的就是集合们的并集。设第 \(i\) 个集合为 \(A_i\),即求 \(|A_1 \cup A_2 \cup A_3 \cup A_4|\)

由容斥原理

\[\left| \bigcup_{i=1}^n A_i \right| = \sum_{k=1}^n (-1)^{k+1} \sum_{1 \leq i_1 < i_2 < \cdots < i_k \leq n} \left| A_{i_1} \cap A_{i_2} \cap \cdots \cap A_{i_k} \right| \]

即集合的并等于集合的交的交错和(奇正偶负)可得到:
\( |A_1 \cup A_2 \cup A_3 \cup A_4| \\ \)

\[= (|A_1| + |A_2| + |A_3| + A_4|) - (|A_1 \cap A_2| + |A_1 \cap A_3| + |A_1 \cap A_4| + |A_2 \cap A_3| + |A_2 \cap A_4| + |A_3 \cap A_4|) \]

\[+ (|A_1 \cap A_2 \cup A_3| + |A_1 \cap A_3 \cap A_4| + |A_2 \cap A_3 \cap A_4|) \\ - |A_1 \cap A_2 \cap A_3 \cap A_4| \]

两个集合的并集怎么求呢?
还是类似刚才的做法,如果要让这种方案成立,我们就强制把两个硬币全部扣去,即 \(s-c_i \cdot (d_i+1)-c_j \cdot (d_j+1)\) 同样可以拓展到 \(n\) 个的情况。

用二进制设计状态更加简洁。

http://www.sczhlp.com/news/12655/

相关文章:

  • Docker知识点2 - Charon
  • unixODBC编程(二)连接数据库
  • 河南萌新联赛2025第(五)场题解:I J(LCA)
  • Ruby 和 Tesseract OCR 实现验证码识别
  • Kotlin 和 Tesseract OCR 实现验证码识别
  • ReasonRank:从关键词匹配到逻辑推理,排序准确性大幅超越传统方法
  • 【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8v9 如何读取 Cache 内部数据并对其进行解析?】
  • ARM - SME 指令
  • 细思极恐怖如斯
  • 牛客2025多校 R5
  • HTML第三次作业 - 详解
  • 高效神经组合优化求解器解决最小最大异构容量车辆路径问题
  • 低成本电阻网络兼容FPGA_DPHY的简要概括
  • 2025 暑假集训 Day10
  • 8gu-JVM
  • JWT 这点小秘密,你们肯定知道!
  • tarjan学习笔记
  • 用stm32f407zgt6说明stm系列芯片命名规则
  • Diffusion model
  • 11
  • 2025.8.15
  • nacos安装及配置
  • 做题随笔:P8981
  • Github新锐从2000 star 冲刺到爆款级工具!到底是怎么做到的,真心不错!!!
  • 小剧场(为了维护机房他人的“机房语录”知识产权利益,本博客更名为小剧场)
  • JNI:全局引用和本地引用 - tomato
  • Github 23000+ star 又一神级开源项目,秒杀市面上主流收费产品,最主要是 轻量化部署!!!
  • 正点原子ESP32S3+ES8388+ESP-SR实现离线语音唤醒
  • 没想到,这也许是Github低代码界天花板,从0到1一分钟搭建系统!这搭建速度没谁啦!!!
  • 8/15