嘛,没什么好注意的…考虑到最优解的情况一定是大+尽可能大的情况
就结束了…
#include<bits/stdc++.h>
using namespace std;
int n,w,a[25],che[25],ans=25;
bool vis[25];
bool cmp(int x,int y){
return x>y;
}
int dfs(int num,int now){//有num车 到第now个猫
if(num>=ans)return 0;
if(now==n+1){
ans=min(ans,num);
return 0;
}
che[num+1]-=a[now];
dfs(num+1,now+1);
che[num+1]+=a[now];
for(int i=1;i<=num;i++){
if(che[i]>=a[now]){
che[i]-=a[now];
dfs(num,now+1);
che[i]+=a[now];
}
}
}
int main(){
cin>>n>>w;
for(int i=1;i<25;i++)che[i] = w;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n,cmp);
dfs(0,1);
cout<<ans<<endl;
}