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

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

被折叠的 条评论
为什么被折叠?



