dfs求解小猫爬山(c++实现)
【代码】dfs求解小猫爬山(c++实现)
·
#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
int q[N],car[N];
int n,w;
int res=1e9;
bool cmp(int a, int b) {
return a > b;
}
void dfs(int u,int cnt){
if(cnt>=res) return;
if(u>n){
res=min(res,cnt);
return ;
}
for(int i=1;i<=cnt;i++){
if(car[i]+q[u]<=w){
car[i] += q[u];
dfs(u+1,cnt);
car[i] -= q[u];
}
}
car[cnt+1]= q[u];
dfs(u+1,cnt+1);
car[cnt+1]=0;
}
int main(){
scanf("%d%d",&n,&w);
for(int i=1;i<=n;i++){
scanf("%d",&q[i]);
}
sort(q+1,q+n+1,cmp);
dfs(1,0);
printf("%d",res);
}
更多推荐
已为社区贡献20条内容
所有评论(0)