小猫爬树
#include<bits/stdc++.h>
using namespace std;
int n,a[20],w,ans,d[20];
struct wq {
int x, y, k;
int s[20];
wq(int aa,int bb,int a[20],int cc) {
x=aa,y=bb,s[20]=a[20],k=cc;
}
};
queue<wq>q;
void bfs(int c,int z,int k) {
int g=INT_MAX,tt;
q.push(wq(c,z,d,k));
while(!q.empty()) {
wq b=q.front();
q.pop();
if(b.y==0) {
for(int i=1; i<=b.k; i++) {
a[b.s[i]]=0;
}
return;
}
if(b.x+1>n) {
if(b.y<g) {
g=b.y;
tt=b.k;
for(int i=1; i<=b.k; i++) {
d[i]=b.s[i];
}
}
}
b.s[b.k++]=b.x;
if(b.y-a[b.x+1]>=0&&a[b.x+1]!=0)q.push(wq(b.x+1,b.y-a[b.x+1],b.s,b.k++));
b.s[b.k]=0;
q.push(wq(b.x+1,b.y,b.s,b.k));
}
for(int i=1; i<=tt; i++) {
a[d[i]]=0;
}
}
int main() {
cin>>n>>w;
for(int i=1; i<=n; i++)cin>>a[i];
for(int i=1; i<=n; i++) {
if(a[i]!=0) {
bfs(i,w,1);
ans++;
}
}
cout<<ans;
}