AcWing 165. 小猫爬山
原题链接
简单
作者:
cqh
,
2020-04-10 22:42:38
,
所有人可见
,
阅读 950
注释里有大概思路
#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
int n,w,ans;
int c[N],weight[N];
void dfs(int now,int cnt){
if(cnt>=ans) return; //剪枝,若当前车数大于答案直接跳过
if(now==n+1){
ans=min(ans,cnt);
return;
}
for(int i=1;i<=cnt;i++){ //枚举一下
if(weight[i]+c[now]<=w){ //挤挤还能装
weight[i]+=c[now];
dfs(now+1,cnt);
weight[i]-=c[now]; //清理案发现场
}
}
weight[cnt+1]=c[now]; //开新车
dfs(now+1,cnt+1);
weight[cnt+1]=0; //消除证据
}
int main(){
cin>>n>>w;
ans=n;
for(int i=1;i<=n;i++) scanf("%d",&c[i]);
sort(c,c+n,greater<int> ()); //剪枝,先安排肥的
dfs(0,0);
printf("%d",ans);
return 0;
}
捕捉到大佬了
%%%