想拿暴力的dfs求助
查看原帖
想拿暴力的dfs求助
270854
二叉苹果树楼主2022/9/3 10:01
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int n,a[MAXN],b[MAXN],c[MAXN],cnt,mul,c13;
stack<int>s1,s2;
void dfs(int k)
{
    if(mul==n)
    {
        bool flag=1;
        for(int i=1;i<=n;i++)
            if(b[i]!=i)
            {
                flag=0;
                break;
            }
        if(flag)
        {
            for(int i=1;i<=k;i++)
                cout<<char(c[i]+'a'-1)<<" ";
            cout<<endl;
            exit(0);
        }
    }

    cnt++;
    mul++;

    c[k]=1;
    s1.push(a[cnt]);
    dfs(k+1);
    s1.pop();

    if(!s1.empty())
    {
        c[k]=2;
        b[mul]=s1.top();
        s1.pop();
        dfs(k+1);
        s1.push(b[mul]);
    }

    c[k]=3;
    s2.push(a[cnt]);
    dfs(k+1);
    s2.pop();

    if(!s2.empty())
    {
        c[k]=4;
        b[mul]=s2.top();
        s2.pop();
        dfs(k+1);
        s2.push(b[mul]);
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(i>=3&&a[i]>a[i-1]&&a[i-1]>a[i-2]&&a[i-2]!=1)
        {
            cout<<0<<endl;
            return 0;
        }
    }
    dfs(1);
    return 0;
}

期望得分40,但dfs写炸了

2022/9/3 10:01
加载中...