AcWing 165. 小猫爬山
原题链接
简单
作者:
腾杨天下
,
2021-04-10 03:21:20
,
所有人可见
,
阅读 382
说实话我不会写
#include<bits/stdc++.h>
using namespace std;
const int N = 20;
int ans=20,a[N],ba[N];
int n,w;
int cmp(int a,int b)
{
return a>b;
}
void dfs(int x,int cnt)
{
if(cnt>=ans)
return ;
if(x==n+1)
{
ans=min(ans,cnt);
return;
}
for(int i=1;i<=cnt;i++)
{
if(ba[i]+a[x]<=w)
{
ba[i]+=a[x];
dfs(x+1,cnt);
ba[i]-=a[x];
}
}
ba[cnt+1]=a[x];
dfs(x+1,cnt+1);
ba[cnt+1]=0;
}
int main()
{
cin>>n>>w;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1,cmp);
dfs(1,0);
cout<<ans;
return 0;
}