

n很小,不用动态规划,直接暴搜
顺序,参数,优化
#include<bits/stdc++.h>
using namespace std;
int cats[20],cars[20];
int n,m;
int ans;
void dfs(int u,int k)
{
if(k>=ans)return ;//剪枝
if(u==n)
{
ans=k;
return;
}
for(int i=0;i<k;i++)
{
if(cars[i]+cats[u]<=m)
{
cars[i]=cars[i]+cats[u];
dfs(u+1,k);
cars[i]=cars[i]-cats[u];
}
}
//增加一辆车
cars[k]=cats[u];
dfs(u+1,k+1);
cars[k]=0;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>cats[i];
}
sort(cats,cats+n);
reverse(cats,cats+n);//从大到小排序
ans=n;
dfs(0,0);
cout<<ans<<endl;
return 0;
}
这篇博客介绍了一个利用深度优先搜索(DFS)解决猫车装载问题的算法。作者首先给出了问题背景,即如何在不超过指定载重的情况下,用最少的车辆装载数量将猫咪运输。接着,代码展示了一种优化的DFS实现,通过排序和剪枝策略来减少搜索空间,最终找到最优解。博客还提到,由于问题规模较小,因此选择了暴力搜索而非动态规划方法。

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



