DFS深度优先搜索之剪枝优化(#小猫爬山)

本文介绍了如何通过优化DFS算法解决小猫爬山问题,强调了明确搜索目标(车辆而非猫)、使用优化搜索方向(如先放重猫)以及最优性剪枝(当车数量超过最小答案时停止搜索)的重要性。

小猫爬山

思路:我们应该先明确方向考虑要搜索什么,我们要搜索的目标是将每只猫放在可放的车上,全都遍历一遍,然后寻找放在哪辆车上,使最终所需车的数量最小。(搜索的是车不是猫)

初学dfs做题时一定要明确我们搜索的到底是什么,否则就可能和我第一次做这个题目一样,想要搜索猫,先将看第一辆车,把最重的猫放进去,再寻找下一只填充该辆车的猫,等车满了,给放入的猫打个标记,再重新遍历一遍猫,开始放第二辆车。(结果就是代码不会写,越看越不像dfs

没有优化的dfs

#include <bits/stdc++.h>
using namespace std;

int n,w;
int a[20];
long long sw[20];
int ans;
void dfs(int u,int cnt)//u是第几只猫,cnt表示车的数量
{
   
   
    if(u==n)//遍历完最后一只猫,将最小答案与当前车数比较,取最小车数
    {
   
   
        ans = min(ans,cnt);
        return;
    }
    for(int i = 1;sw[i]!=0;i++)//将所有车遍历一遍,如果sw[i]==0,说明第i辆车上没有猫,需要新开一辆车
    {
   
   
        if(sw[i]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值