小猫爬山

Posted hhyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小猫爬山相关的知识,希望对你有一定的参考价值。

# 题意

运送n个猫下山,每个车上最多承受w重量,n只小猫的重量分别为c1,c2,c3。
每用一辆车需要1元,最少需要多少钱送下所有的猫
N<=18, Ci,W<=1e8

# 题解

n很小所以可以用深搜来做,两个参数,一个记录现在是第几只猫,now另一个记录现在已经开了几辆车,
两个剪枝优化。
如果当前的车的数目已经大于已经得到数目最小值可以终止,
先把重量重的弄上可以减少搜索树分支的数量。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int cat[20];
 4 int car[20];
 5 int n,w;
 6 int ans;
 7 void dfs(int now,int cnt){
 8    if(cnt>=ans)
 9       return;
10    if(now == n+1){
11       ans=min(ans,cnt);
12       return;
13    }
14    for(int i=1;i<=cnt;i++){
15       if(car[i]+cat[now]<=w){
16          car[i]+=cat[now];
17          dfs(now+1,cnt);
18          car[i]-=cat[now];
19       }
20    }
21    car[cnt+1]=cat[now];
22    dfs(now+1,cnt+1);
23    car[cnt+1]=0;
24 }
25 int main(){
26    cin>>n>>w;
27    for(int i=1;i<=n;i++)
28       cin>>cat[i];
29    ans=n;
30    dfs(1,0);
31    cout<<ans<<endl;
32 }

 

以上是关于小猫爬山的主要内容,如果未能解决你的问题,请参考以下文章

小猫爬山

洛谷 P1361 小猫爬山

小猫爬山

小猫爬山(深搜)

TyvjP2018 「Nescafé26」小猫爬山

小猫爬山题解(暴力解题)