一道300多行搜索数独调不出来,做一道简单的搜索缓一下。。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,0,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
int a[100];
int cab[100];
int ans=111;
int n,w;
void dfs(int x,int cnt)//处理到第几只猫,用了缆车的数量
{
if(x==0)
{
ans=min(ans,cnt);
return ;
}
if(cnt>=ans)return ;
for(int i=1;i<=cnt;i++)
{
if(cab[i]+a[x]<=w)
{
cab[i]+=a[x];
dfs(x-1,cnt);
cab[i]-=a[x];
}
}
cab[cnt+1]=a[x];
dfs(x-1,cnt+1);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>w;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
dfs(n,1);
cout<<ans<<endl;
return 0;
}