CF753A Santa Claus and Candies 题解

Content

圣诞老人有 \(n\) 颗糖果,他想把这些糖果分发给一些小孩子,并想要每个孩子都能得到不同的糖果数目。求能得到糖果的孩子的最大数目,以及他们各自得到的糖果数。

数据范围:\(1\leqslant n\leqslant 1000\)

Solution

我们可以往下枚举每个小孩的糖果数目,然后不断地深入搜索,然后得到的第一个合法的方案就是我们想要的得到糖果的孩子的最大数目,直接输出方案即可。

Code

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;

int n, vis[1007];

void dfs(int x) {
	if(!x) {
		int ans = 0;
		for(int i = 1; i <= n; ++i)	ans += vis[i];
		printf("%d\n", ans);
		for(int i = 1; i <= n; ++i)
			if(vis[i])	printf("%d ", i);
		exit(0);
	}
	for(int i = 1; i <= x; ++i) {
		if(!vis[i]) {
			vis[i] = 1;
			dfs(x - i);
			vis[i] = 0;
		}
	}
}

int main() {
	scanf("%d", &n);
	dfs(n);
}
posted @ 2021-12-21 20:08  Eason_AC  阅读(52)  评论(0)    收藏  举报