#2、3、4WA 25pts求助
查看原帖
#2、3、4WA 25pts求助
1025097
koukou楼主2024/12/16 21:24

Code:

#include<bits/stdc++.h>
using namespace std;
const int N = 15;
int n, k, maxn, s[N], ans[N];
bool dfs2(int l, int sum, int mb)
{
	if(l > n || sum > mb)
	{
		return 0;
	}
	if(sum == mb)
	{
		return 1; 
	}
	for(int i = 0; i < N; i++)
	{
		if(s[i])
		{
			if(dfs2(l + 1, sum + i + 1, mb))
			{
				return 1;
			}
		}
	}
	return 0; 
}
int check()
{
	for(int i = 1; ; i++)
	{
		if(!dfs2(0, 0, i))
		{
			return i - 1;
		}
	}
}
void dfs(int l, int last)
{
	if(l == k)
	{
		int tmp = check();
		if(tmp > maxn)
		{
			maxn = tmp;
			for(int i = 0; i < N; i++)
			{
				ans[i] = s[i];
			}
		}
		return;
	}
	for(int i = last; i < N; i++)
	{
		s[i] = 1;
		dfs(l + 1, i + 1);
		s[i] = 0;
	}
	return;
}
int main()
{
	cin >> n >> k;
	dfs(0, 0);
	for(int i = 0; i < N; i++)
	{
		if(ans[i])
		{
			cout << i + 1 << " ";
		}
	}
	cout << "\nMAX=" << maxn;
	return 0;
}
2024/12/16 21:24
加载中...