救~~~~~~~~(5AC,1TLE,4WA)
查看原帖
救~~~~~~~~(5AC,1TLE,4WA)
990027
Rain2012楼主2023/8/11 10:48

思路:

输入n,用DFS来获取全排列,全排列原本输出的地方改成check判断这一种排列是否符合要求

代码:

#include<bits/stdc++.h>
using namespace std;

int check(int len,int a[])
{
	if(len == 1)
	{
		return a[1];
	}
	for(int i = 1;i < len;i++)
	{
		a[i] += a[i+1];
	}
	check(len-1,a);
}

void copy(int x[],int y[])
{
	for(int i = 1;i < sizeof(x);i++)
	{
		y[i] = x[i];
	} 
}

bool vis[10],flag = false;
int ans[10],sna[10];
int n,o;
void dfs(int cur,int sum)
{
	if(flag)
	{
		return ;
	}
    if(cur > n)
    {
    	int c[10];
    	copy(ans,c);
 		if(check(n,c) == o && !flag)
 		{
 			for(int i = 1;i <= n;i++)
 			{
 				sna[i] = ans[i];
			}
			flag = true;
		}
    }
    else
    {
        for(int i = 1;i <= n;i++)
        {
            if(!vis[i])
            {
                vis[i] = true;
                ans[cur] = i;
                dfs(cur+1,sum);
                vis[i] = false;
            }
        }
    }
}

int main()
{
	cin>>n>>o;
	dfs(1,o);
	for(int i = 1;i <= n;i++)
	{
		cout<<sna[i]<<" ";
	}
}
2023/8/11 10:48
加载中...