全wa,思路貌似没啥问题啊
查看原帖
全wa,思路貌似没啥问题啊
575423
Coding_Zhouzehao楼主2022/5/27 22:26
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 2010;
const int maxm = 30;
int n, m, a[maxm], ans;
bool f[maxn];
bool vis[maxm];
void dfs(int k,int last)//k表示取了多少个
{
	if (k == m + 1)//拿走了m个,必须制裁
	{
		memset(f, 0, sizeof(f));
		f[0] = 1;
		for (int i = 1; i <= n; i++)
			if (!vis[i])//没被拿走
				for (int j = 2000; j >= 0; j--)
					if(j + a[i] <= 2000)//太大了可不行
						f[j + a[i]] = f[j];//嘎嘎标记
		int num = 0;
		for (int i = 1; i <= 2000; i++)
			num += f[i];
		ans = max(ans, num);
		return;
	}
	for (int i = last + 1; i <= n; i++)
	{
		vis[i] = 1;//标记为拿走了
		dfs(k + 1, i);
		vis[i] = 0;//回首掏
	}

	
}
int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	dfs(1, 0);
	cout << ans;
}
2022/5/27 22:26
加载中...