dp 神仙题及 trick

一、背包

「HNOI2007」梦幻岛宝珠

题目
将物品按照 b b b 分组,每组内部 dp,然后合并。
组内的 dp,就是设 g [ i ] [ j ] g[i][j] g[i][j] i i i 组,选出 j × 2 i j\times2^i j×2i 的最大价值。
现在考虑如何合并,设 f [ i ] [ j ] f[i][j] f[i][j] 从高到低到 i i i 位, w w w 减去已选后还剩 j × 2 i j\times 2^i j×2i 的最大价值。
转移是 f [ i − 1 ] [ 2 × j + c − k ] ← f [ i ] [ j ] + g [ i − 1 ] [ k ] f[i-1][2\times j+c-k]\leftarrow f[i][j]+g[i-1][k] f[i1][2×j+ck]f[i][j]+g[i1][k]。需要注意的是,转移中的 2 × j + c − k 2\times j+c-k 2×j+ck 要与 10 × n 10\times n 10×n 取 min,因为过大的值即使记录下来也对后续无影响。

「NOI2015」寿司晚宴

题目
首先考虑暴力。设 d p [ i ] [ S 1 ] [ S 2 ] dp[i][S_1][S_2] dp[i][S1][S2] 表示前 i i i 个数,两个人选择的质数集合分别是 S 1 S_1 S1 S 2 S_2 S2。转移就是 d p [ i + 1 ] [ S 1 ∣ k ] [ S 2 ] ← d p [ i ] [ S 1 ] [ S 2 ] dp[i+1][S_1|k][S_2]\leftarrow dp[i][S_1][S_2] dp[i+1][S1k][S2]dp[i][S1][S2] d p [ i + 1 ] [ S 1 ] [ S 2 ∣ k ] ← d p [ i ] [ S 1 ] [ S 2 ] dp[i+1][S_1][S_2|k]\leftarrow dp[i][S_1][S_2] dp[i+1][S1][S2k]dp[i][S1][S2]
n ≤ 500 n\le500 n500,一个数中大于 n \sqrt{n} n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值