【迭代加深搜索】
【代码】
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,w,v[101],vv[101];//v每只小猫重量,vv每辆缆车已装重量
bool dfs(int cur,int z)//第cur只小猫,有z辆缆车
{
for(int i=1;i<=cur&&i<=z;i++)
if(vv[i]+v[cur]<=w)
{
vv[i]+=v[cur];
if(cur==n)
return 1;
else
if(dfs(cur+1,z))
return 1;
vv[i]-=v[cur];
}
return 0;
}
int main()
{
scanf("%d%d",&n,&w);
for(int i=1;i<=n;i++)
scanf("%d",v+i);
for(int i=1;i<=n;i++)//搜索缆车数
{
memset(vv,0,sizeof(vv));
if(dfs(1,i))
{
printf("%d\n",i);
break;
}
}
return 0;
}