求调,谢谢
查看原帖
求调,谢谢
355521
rainbow_star楼主2021/10/30 13:47
#include<iostream> 
#include<cstdio> 
#include<cstring> 
#include<queue>
#include<algorithm> 
using namespace std;
int n,m,a[21];
bool choose[4];
int finalans;
int maxx; 
void myans()
{
	bool use[10001];
	use[0]=true;
	int i,j,ans=0;
	for(i=1;i<=10000;i++)
		use[i]=false;
	for(i=1;i<=n;i++)
	{
		if(choose[i]==1)
			continue;
		for(j=10000;j>=a[i];j--)
		{
			if(use[j-a[i]]==true&&use[j]==false)
			{
				use[j]=true;
				ans++;
			}
		}
	}
	finalans=max(finalans,ans);
}
void search(int now,int num)
{
	if(now==n+1||num==m)
	{
		if(num==m)
			myans();
		return;
	}
	//不选
	if(n-now+1>m-num)
		search(now+1,num); 
	//选
	if(num<m)
	{
		choose[now]=1;
		search(now+1,num+1); 
		choose[now]=0;
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	int i;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		maxx=max(a[i],maxx);
	}
	if(m==0)
		myans();
	else
		search(1,0);
	printf("%d\n",finalans);
	return 0;
}
2021/10/30 13:47
加载中...