背包进阶
1. 分组背包 题意 在01背包基础上,将其中的物体分成 $k$ 组,每组内的物品相互冲突,即只能取其中一个,问最大价值。 ...
1. 分组背包 题意 在01背包基础上,将其中的物体分成 $k$ 组,每组内的物品相互冲突,即只能取其中一个,问最大价值。 ...
前言 今天跟着背包九讲把背包再学习一下,dd_engi大佬的背包九讲Github链接: 背包九讲 1. 采药(01背包) 题意 有 $n$ 个价值为 $w_i$ ,体积为 $v_i$ 的物品,装入体积为 $V$ 的背包中,问能获得的最大为多少。 ...
1. 石子归并 题意 $N$ 堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将 $N$ 堆石子合并成一堆的最小代价。 思路 很经典的区间dp例题,我们可以用 $dp[i][j]$ 来表示合并 $i\sim j$ 所需的最小代价,通过枚举中间的断点,来通过方程 $dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+cost[i][j])$ ,其中 $cost[i][j]$ 表示从 $i\sim j$ 的石子总数,通过前缀和很容易计算。在进行状态转移时需要前面状态已知,因为是枚举中间断点,所以断开区间的长度一定要小于原区间,因此在转移之前需要确保比他短的区间都已经达到了最小代价,因此我们可以通过枚举区间长度从 $2\sim N$ 来实现。 ...
前言 某位大佬曾经说过,dp不会没问题,想不到状态转移方程没问题,多做题就会了。所以,我打算多刷点dp题。那么,先从基础刷起吧。 1. P1091 合唱队形 题意 已知序列 $a$ 有 $n$ 个数,通过取出其中一些数可以使他满足严格的先增再减序列,问最少取出几个。 ...
A. Array with Odd Sum 题意 给出包含 n 个正整数的序列 a ,你可以把任何一个元素 $a_i$ ,赋值给另一个元素 $a_j$ ($i\neq j$) ,问通过任意此操作能否将序列 a 的和变为奇数。可以输出 YES ,不可以输入 NO. 思路 首先当起始和为奇数的时候,就直接可输出 YES 了,如果是偶数的话,我们可以发现,如果序列元素中同时包含奇数和偶数,那么就是可以的,否则不可以。 ...