3.13&&3.20(移至3.16)
今天是dp的好日子啊
dp 介绍
dp要素:状态、转移、边界条件、转移顺序
可以使用 dp 的题目所具备的重要性质:无后效性(之前如何到达该状态与之后没有关系)
dp 引入
既然是dp,那包从背包开始了
01,多重,完全,还有……扩展?
采药三部曲
过
luogu P5365 [SNOI2017] 英雄联盟
题目描述
正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」。
现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!
小皮球只会玩 \(\text{N}\) 个英雄,因此,他也只准备给这 \(\text{N}\) 个英雄买皮肤,并且决定,以后只玩有皮肤的英雄。
这 \(\text{N}\) 个英雄中,第 \(\text{i}\) 个英雄有 \(K_i\) 款皮肤,价格是每款 \(C_i\) Q 币(同一个英雄的皮肤价格相同)。
为了让自己看起来高大上一些,小皮球决定给同学们展示一下自己的皮肤,展示的思路是这样的:对于有皮肤的每一个英雄,随便选一个皮肤给同学看。
比如,小皮球共有 5 个英雄,这 5 个英雄分别有 \(\text{0,0,3,2,4}\) 款皮肤,那么,小皮球就有 \(3 \times 2 \times 4 = 24\) 种展示的策略。
现在,小皮球希望自己的展示策略能够至少达到 \(\text{M}\) 种,请问,小皮球至少要花多少钱呢?
输入格式
第一行,两个整数 \(\text{N,M}\)。
第二行,\(\text{N}\) 个整数,表示每个英雄的皮肤数量 \(K_i\)。
第三行,\(\text{N}\) 个整数,表示每个英雄皮肤的价格 \(C_i\)。
输出格式
一个整数,表示小皮球达到目标最少的花费。
输入输出样例 #1
输入 #1
3 24
4 4 4
2 2 2
输出 #1
18
说明/提示
样例解释
每一个英雄都只有4款皮肤,每款皮肤2 Q币,那么每个英雄买3款皮肤,\(3 \times 3 \times 3 \ge 24\),共花费 \(6 \times 3\) Q币。
数据范围
共 10 组数据,第 \(\text{i}\) 组数据满足:\(\text{N} \le \max(5, \log_2^4i)\)
\(\text{100}\%\) 的数据:\(\text{M} \le 10^{17}, 1 \le K_i \le 10, 1 \le C_i \le 199\)。保证有解。
设计非常银杏,不过除了是乘法之外没有任何区别,过
P1077 [NOIP 2012 普及组] 摆花
题目描述
小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 \(m\) 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 \(n\) 种花,从 \(1\) 到 \(n\) 标号。为了在门口展出更多种花,规定第 \(i\) 种花不能超过 \(a_i\) 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
输入格式
第一行包含两个正整数 \(n\) 和 \(m\),中间用一个空格隔开。
第二行有 \(n\) 个整数,每两个整数之间用一个空格隔开,依次表示 \(a_1,a_2, \cdots ,a_n\)。
输出格式
一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 \(10^6+7\) 取模的结果。
输入输出样例 #1
输入 #1
2 4 3 2输出 #1
2说明/提示
【数据范围】
对于 \(20\%\) 数据,有 \(0<n \le 8,0<m \le 8,0 \le a_i \le 8\)。
对于 \(50\%\) 数据,有 \(0<n \le 20,0<m \le 20,0 \le a_i \le 20\)。
对于 \(100\%\) 数据,有 \(0<n \le 100,0<m \le 100,0 \le a_i \le 100\)。
NOIP 2012 普及组 第三题
孩子,这不背包
dp 分类
线性:
一维
二维
高维
P1004 [NOIP 2000 提高组] 方格取数,
小小四维可笑可笑也许三维也行
区间:
环形:
P1880 [NOI1995] 石子合并,裂环为链即可
树形:
图:
没有
状压:
插头?没有
dp 进阶
小trick:通过交换答案和容积,防止容积过大,\(O(nm)\)爆炸
优化
1.多重背包优化
2.前缀和优化
3.二分/双指针优化
quiz
https://www.luogu.com.cn/problem/P1855

浙公网安备 33010602011771号