2018.8.14

水一水今天的博客吧

T1

切了算了最长上升子序列板板题

T2

树形 Dp 唉我还是太菜了,知道是树形 Dp D不来(滑稽)

首先看下题目,如果隔离 m 个点,那么相当于在树上选择 m 个点作背包,定义 Dp 方程:dp [ u ] [ j ] 表示 u 子树内选择 j 个节点隔离并且一定选择u,那么除了考虑 u 的所有儿子之外,还要加上 u 和 u 爸爸切断的代价 1,所以转移很显然了:t = std :: min ( t , dp [ u ] [ k ] + dp [ v ] [ j - k ] ),其中 t 初值为 dp [ u ] [ j ] + 1,然后背包就好了……

T3

状压水水题……

T4

这是一道背包题是人都看得出来,但是……但是这题有个限制!
那就是你既要选择出一个子集S,S满足硬币价值的总和是K,再选出S的一个子集,如果其能够凑出某一个数,那么则记录这个数,需要求出记录过的所有的数……

这是一道很好的 Dp,有一定的限制条件,看到 N<=500 马上反应是 N 的 3 次方的 Dp,但是写不来啊,只会处理恰好满足 K 的集合 S ,这个做个背包就好了,但是枚举子集的复杂度是 3 的次方级别,伤不起啊。

可以考虑加一维 Dp 状态,Dp [ S ] [ S2 ] 表示选了 S 之后能够凑出 S2 的话那么这个 Dp 值为 True ,那么转移的时候就容易啦,统计Dp [ K ] 第 2 维,只要是 True就输出……

初值 Dp [ 0 ] [ 0 ] = 1,意义是没有硬币时一定能凑出 0 元……

转移的时候只能由 Dp 值为 1 的状态转移,枚举 N 的 3 次方……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值