【DP/DFS/回溯/BFS等】链接汇总

本文通过分析LeetCode上的几道题目,如LC 1896、LC 698、LC 847、LC 526和LC 1434,探讨了如何运用深度优先搜索(DFS)、回溯、广度优先搜索(BFS)和位操作动态规划(Bitmask DP)解决复杂问题。文章提到了在不同场景下选择不同搜索算法的重要性,并通过具体例子展示了这些算法在实际问题中的应用。例如,LC 698的四种解法(两种DFS,两种BFS)和LC 847的BFS改进版与Bitmask DP。同时,作者强调了在位操作动态规划中,固定状态的值在任何顺序到达时都是固定的这一关键点。
摘要由CSDN通过智能技术生成

【LC 1896】
我只想到了从正面的角度,没想到换个角度去做。
换个角度的时候我也过于纠结1~n不是连续的,而实际上只要看是不是最高的就可以。
所以说这个题非常好。https://leetcode.com/problems/number-of-ways-to-rearrange-sticks-with-k-sticks-visible/discuss/1211070/C%2B%2B-Detailed-Explanation-with-Thought-Process-or-DP
【LC 698】
这道题非常好!
https://leetcode.com/problems/partition-to-k-equal-sum-subsets/discuss/1020520/Java-Summary%3A-Two-DFS-one-DPBFS-solutions。
↑这个链接总结了4种方法。
这个问题其实化为,“将m个数,分成k组,使得每组和相等”。
2种DFS,2种BFS。

DFS的方法分成两种:
1、建立k个篮子,put item one by one.
2、fill each bucket one by one.
这两种DFS的代码都比较难写,尤其涉及回溯。
对于第一种DFS方法,要注意的是先填大的,此外就是if(_dfs(…)) return true。也就是递归的边界条件等等的写法。正确示例见5/26/2021的4ms的提交。

对于第二种DFS方法,要注意的是,就算先填好了一个篮子,但是这样的填法可能会导致后面的填不了。即不可以用
for(int i=0;i<k;++i) fillEachBucket();的方法写,而是要写成递归和回溯的。正确示例见提交的5/26/2021的0ms

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值