玄关,求调
查看原帖
玄关,求调
970857
qinpeng01楼主2023/11/17 08:03
#include<bits/stdc++.h>
using namespace std;
const int Q=1e3+10;
int n,m,a[Q],cnt,fans,ans;
bool vis[Q];
bool f[Q];
void dp()
{
	memset(f,0,sizeof(f));
	f[0]=1,ans=0,cnt=0;
	for(int i=1;i<=n;++i)
	{
		if(vis[i])
		continue;
		for(int j=cnt;j>=0;--j)
		{
			if(f[j]&&!f[j+a[i]])
			{
				f[j+a[i]]=1;
				ans++;
			}
		}
		cnt+=a[i];
	}
	fans=max(ans,fans);
}
void dfs(int now,int away)
{
	if(away>m)
	return;
	if(now>n)
	{
		if(away==m)
		dp();
		return;
	}
	dfs(now+1,away);
	vis[now]=1;
	dfs(now+1,away+1);
	vis[now]=0;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i]);	
	dfs(1,0);
	printf("%d",fans);
	return 0;
}
2023/11/17 08:03
加载中...