学习总结 10.9

本周由于身体原因,学习进度较慢

新的内容:
算法:区间DP与平行四边形优化,记忆化搜索,树形DP(主要难点在明确数和建树之后DFS上,DP状态倒是并不难),并查集。

并查集:每个下标对应一个"集",对于每个集我们可以进行合并,可以由集的一个元素进行查找
查找操作:
find(int x)
return x==s[x]?x:find(s[x])
合并操作:
union(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
s[x]=s[y]
}

区间DP与平行四边形优化: 在不断扩大探索区间的时候会遇到很多重复细分的点,比如在i到j区间去找最优细分点k的时候实际上不需要从i到j去找,只需要从i到j-1的最优细分点k1到i+1到j的最优细分点k2之间去找i到j的最优细分点k就可以,这样能省略很多不必要的重复计算,这就是平行四边形优化。

刷题获得的新知识
1.原来滚动数组的写法不是只有一种,背包问题的几层循环当控制不同的意义时功能也不同,
比如:我第一层控制物品,可以看一个背包的完全背包和0-1背包状态下能装的物品最大值。
如果第一层控制的背包容量,那么就可以枚举多个背包的最大值,具体就是我做的赛斯石那个题。
2.背包有的时候不是以背包来出现的,我需要多少多少东西,这些东西的最小花费,我要买多少多少东西,这些东西的最大利润,但总归都是有一点不变:给定一堆存在的价值和费用,通过某种规则要求我们求最优解。
3.在学树形DP的时候看到了vector很神奇的一招 vecotrtree
tree[a].push_back(b),实际上是等同于生成了一个二维数组,只不过数组每一行的长度(a)都不同罢了。
4.递推和记忆化搜索实际上是把DP中复杂度高的问题通过递归的方式来优化dp,记忆化搜索用来降低时间复杂度的主要方式就是避免重复的运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值