代码评测二十分,我下载了好几个数据点,答案是一毛一样的,比如5 3和20 17
查看原帖
代码评测二十分,我下载了好几个数据点,答案是一毛一样的,比如5 3和20 17
1193110
reeceli楼主2023/12/26 21:23
# include<stdio.h>
# include<string.h>
# include<math.h>

long long mm[2000] = { 0 };
int n;
int m;
int u = 0;
int search(long long q)
{
	for (int i = 0; i <= 2000; i++)
	{
		if (q == mm[i])
			return 0;
	}
	return 1;
}
void find(int i,int count,long long q)
{
	if (count == 0)
	{
		if (search(q)==0)
		{
			return;
		}
		else
		{
			mm[u++] = q;
			for (int i = 1; i <= n; i++)
			{
				int w = pow(2, i - 1);
				if ((q & w)!= 0)
				{
					printf("%3d", i);
				}
			}
			printf("\n");
		}
		//在这过程中有大量重复,使用记忆化搜索
		return; 
	}
	//如果这一位走的话
	for (int j = i + 1; j <= n - count + 2; j++)
	{
		int p = pow(2, i - 1);
		find(j, count - 1,	q | p);
	}
	//如果这一位不走
	if (i >= n - count + 1)
		return;
	else
		find(i + 1, count, q);

}
int main()
{
	scanf("%d %d", &n, &m);
	if(n==m)
	{
	    for(int i=1;i<=n;i++)
	    {
	        printf("%3d",i);
	    }
	}
	else
	    find(1, m,0);
	return 0;
}
2023/12/26 21:23
加载中...