n很小,不用动态规划,直接暴搜
顺序,参数,优化
#include<bits/stdc++.h>
using namespace std;
int cats[20],cars[20];
int n,m;
int ans;
void dfs(int u,int k)
{
if(k>=ans)return ;//剪枝
if(u==n)
{
ans=k;
return;
}
for(int i=0;i<k;i++)
{
if(cars[i]+cats[u]<=m)
{
cars[i]=cars[i]+cats[u];
dfs(u+1,k);
cars[i]=cars[i]-cats[u];
}
}
//增加一辆车
cars[k]=cats[u];
dfs(u+1,k+1);
cars[k]=0;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>cats[i];
}
sort(cats,cats+n);
reverse(cats,cats+n);//从大到小排序
ans=n;
dfs(0,0);
cout<<ans<<endl;
return 0;
}