dfs全排列问题模板

https://www.acwing.com/problem/content/description/1211/

全排列问题+如何利用全排列插入符号来计算

#include <bits/stdc++.h>
using namespace std;
const int N=10;
int dist[N];
int mark[N];
int target,cnt;

int cal(int l,int r){
    int res=0;
    for(int i=l;i<=r;i++){
        res=res*10+dist[i];
    }
    return res;
}


void dfs(int u){
    //插入+,/
    if(u==9){
        for(int i=0;i<7;i++){
            for(int j=i+1;j<8;j++){
                int a=cal(0,i);
                int b=cal(i+1,j);
                int c=cal(j+1,8);
                if(a*c+b==target*c){
                    cnt++;
                }
            }
        }
        return ;
    }
    
    
    //生成全排列
    for(int i=1;i<=9;i++){
        if(!mark[i]){
            dist[u]=i;
            mark[i]=true;
            dfs(u+1);
            mark[i]=false;
        }
    }
}


int main(){
    cin>>target;
    dfs(0);
    cout<<cnt;
    return 0;
}

posted @ 2022-01-30 12:27  秋月桐  阅读(35)  评论(0编辑  收藏  举报