dfs小猫爬山

https://ac.nowcoder.com/acm/contest/1014/A

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
    return a>b;
}
int a[20],car[20]={0};
int ans;
int n,w;
void dfs(int now,int cnt)
{
    //剪枝
    if(cnt>=ans)
        return;
    if(now>n)
    {
        ans=min(ans,cnt);
      return;
    }
    for(int i=1;i<=cnt;i++)
    {
        if(car[i]+a[now]<=w)//装得下
        { 
            car[i]+=a[now];
            dfs(now+1,cnt);
            car[i]-=a[now];//回溯
        }
    }
    car[cnt+1]=a[now];//新开个箱子
    dfs(now+1,cnt+1);
    car[cnt+1]=0;
}
int main()
{
scanf("%d %d",&n,&w);
for(int i=1;i<=n;i++)
    scanf("%d",&a[i]);
sort(a+1,a+n+1,cmp);
  ans=n;
  dfs(1,0);
  printf("%d\n",ans);
}

 

posted @ 2021-07-09 16:06  废柴废柴少女  阅读(34)  评论(0)    收藏  举报