Segment Tree with Pruning(记忆化搜索)
一个是记忆化搜索,一个是用map来进行存储,因为数组开不到这么大,算是一个技巧了,把一段数字分成两段,有两种情况,
一个是两段均等分开:
tree[r] = 2 * build(r/2,k) + 1;//不要忘记本身自己也是一个节点
另一种情况是两边相差1:
tree[r] = build(r/2,k) + build(r/2 + 1, k) + 1;
分情况分好两段这道题也就结束了,剩下就是记忆化搜索了,如果这个我们之前计算过,我们之间返回值即可。(还有就是不要忘记clear一下map)
完整代码..
原创
2021-07-28 10:55:57 ·
301 阅读 ·
0 评论