码迷,mamicode.com
首页 > 其他好文 > 详细

小猫爬山

时间:2020-03-03 12:35:10      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:最小   space   分支   ==   name   oid   需要多少钱   namespace   strong   

# 题意

运送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 }

 

小猫爬山

标签:最小   space   分支   ==   name   oid   需要多少钱   namespace   strong   

原文地址:https://www.cnblogs.com/hhyx/p/12401511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!