非常愚蠢的dfs策略配上非常愚蠢的股价函数总算通过了橙题...
#include<bits/stdc++.h>
#define R register
using namespace std;
typedef long long ll;
const int MAXN=30005;
int n,m,c[MAXN];
int ans;
bool vis[MAXN];
bool cmp(int t1,int t2){
return t1>t2;
}
inline int check(int t){
int s=0;
for(int i=1;i<=n;i++)if(!vis[i])s+=c[i];
return max(0,(s-t+m-1)/m);
}
void dfs(int x,int t,int s){
if(check(m-t)+s>=ans)return ;
if(s>=ans)return ;
if(x==n+1){
ans=min(ans,s);
return ;
}
bool flag=1;
for(int i=1;i<=n;i++){
if(!vis[i]&&c[i]+t<=m){
vis[i]=1;
dfs(x+1,c[i]+t,s);
vis[i]=0;
flag=0;
}
}
if(flag){
for(int i=1;i<=n;i++){
if(!vis[i]){
vis[i]=1;
dfs(x+1,c[i],s+1);
vis[i]=0;
return ;
}
}
}
}
int main(){
cin>>n>>m;
ans=n;
for(int i=1;i<=n;i++)cin>>c[i];
sort(c+1,c+1+n,cmp);
dfs(1,0,1);
cout<<ans;
return 0;
}