#include<bits/stdc++.h> // 状压dp 模板
using namespace std;
int n,m;
int f[1<<19],g[1<<19];
int a[20];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=0;i<=1<<n;i++)
{
f[i]=2147483647;
g[i]=-2147483646;
}
f[0]=1;
g[0]=m;
for(int i=0;i<(1<<n);i++)
{
for(int j=1;j<=n;j++)
{
int k=j-1;
if(i&(1<<k)) continue;
if(g[i]>=a[j])
{
if(f[i]<=f[i|1<<k])
{
f[i|1<<k]=f[i];
g[i|1<<k]=max(g[i|1<<k],g[i]-a[j]);
}
}
else
{
if(f[i]+1<=f[i|1<<k])
{
f[i|1<<k]=f[i]+1;
g[i|1<<k]=max(m-a[j],g[i|1<<k]); //g[i|1<<k]=m-a[j];
}
}
}
}
cout<<f[(1<<n)-1]<<endl;
return 0;
}
按注释中的写法得出来的答案比正解还要小
不能李姐了