社区讨论

这题的算法是什么,全排列过不了啊

P5339[TJOI2019] 唱、跳、rap和篮球参与者 40已保存回复 51

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
51 条
当前快照
1 份
快照标识符
@mcdey9dm
此快照首次捕获于
2025/06/26 21:22
8 个月前
此快照最后确认于
2025/11/21 07:06
4 个月前
查看原帖
CPP
#include<cstdio>
int v[5050];
int c[5050], n, a[5],ans;
void dfs(int k=1)
{
	if (k == n + 1)
	{
		ans++;
		return;
	}
	for (int i = 1; i <= 4; i++)
	 if(v[i]<a[i])
	 {
		if (k >= 4)
		{
			if (i == 4 && c[k - 1] == 3 && c[k - 2] == 2&&c[k-3]==1)
				continue;
		}
		c[k] = i;
		v[i]++;
		dfs(k + 1);
		v[i]--;
		c[k] = 0;
	}
}
int main()
{
	scanf("%d %d %d %d %d", &n, &a[1], &a[2], &a[3], &a[4]);
	dfs();
	printf("%d", ans);
}
这题有规律吗? 是不是该用递推?

回复

51 条回复,欢迎继续交流。

正在加载回复...