小猫爬山思路


so:

所以代码是:

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
int w[21],sum[21];
bool cmp(int a,int b)
{
	return a>b;
}
void dfs(int u,int k)
{
	if(k>=ans)
	{
		return;
	}
	if(u==n+1)
	{
		ans=k;
		return;
	}
	for(int i=1;i<=k;i++)
	{
		if(sum[i]+w[u]<=m)
		{
			sum[i]+=w[u];
			dfs(u+1,k);
			sum[i]-=w[u];
		}
	}
	sum[k+1]=w[u];
	dfs(u+1,k+1);
	sum[k+1]=0;
	
}
int main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++)
	{
		cin >> w[i];
	}
	sort(w+1,w+1+n,cmp);
	ans=n;
	dfs(1,1);
	cout << ans;
	return 0;
}
posted @ 2023-03-18 12:08  Momo·Trace  阅读(26)  评论(0编辑  收藏  举报