CF977D Divide by three, multiply by two

題目連接

我同窗在旁邊作者道題,我也看了一下ios

真的好spa

一看這道題,直接搜索code

剪枝是不可能剪枝的一生不可能get

Code

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const long long MAXN = 105;

long long n;
long long a[MAXN],b[MAXN];
bool sign = false;
bool flag[MAXN];

void dfs(long long now){
    if (now == n){
        for (int i = 1 ; i <= n ; i++){
            printf("%lld ",b[i]);
        }
        sign = true;
        return ;
    }
    
    if (sign == true) return ;
    
    for (int i = 1 ; i <= n ; i++){
        if (flag[i] == true) continue;
        if(flag[i] == false){
            if (b[now] * 2 == a[i] || (a[i] * 3 == b[now])){ //因爲要當p[i] % 3 = 0 時
                b[now + 1] = a[i];
                flag[i] = true;
                dfs(now + 1);
                flag[i] = false;
            }
        }
    }   
    
    
    
    return ;
}

int main(){
    scanf("%lld",&n);
    
    for (int i = 1 ; i <= n ; i++) scanf("%lld",&a[i]);
    
    for (int i = 1 ; i <= n ; i++){
        flag[i] = true;
        b[1] = a[i];
        dfs(1);
        flag[i] = false;
    }

    return 0;
}
相關文章
相關標籤/搜索