#44198: cpp answer


suyueh (suyueh)

School : No School
ID : 272111
IP address : [101.10.93.239]
Last Login :
2024-12-10 22:48:32
b510. M 皇后 N 城堡 -- 清華 MOOCs 2014 程式設計導論期末考 | From: [111.242.18.129] | Post Date : 2024-11-11 19:51

#include <bits/stdc++.h>
using namespace std;
 
int m, n, r[15], c[15], qa[25], qb[25], ca[25], cb[25];
 
int f(int Q, int C, int i){
    if ((!Q && !C) || i > (m+n)) return 1;
    int ret = 0;
    if (C){
        for (int j = 1; j <= (m+n); j++){
            if (c[j]) continue;
            if (qa[i-j+10] || qb[i+j]) continue;
            c[j] = 1;
            ca[i-j+10]++;
            cb[i+j]++;
            ret += f(Q, C-1, i+1);
            c[j] = 0;
            ca[i-j+10]--;
            cb[i+j]--;
        }
    }
    if (Q){
        for (int j = 1; j <= (m+n); j++){
            if (c[j]) continue;
            if (qa[i-j+10] || qb[i+j]) continue;
            if (ca[i-j+10] || cb[i+j]) continue;
            c[j] = 1;
            qa[i-j+10] = 1;
            qb[i+j] = 1;
            ret += f(Q-1, C, i+1);
            c[j] = 0;
            qa[i-j+10] = 0;
            qb[i+j] = 0;
        }
    }
    return ret;
}
 
int main(){
    cin >> m >> n;
    cout << f(m, n, 1) << "\n";
}

 
ZeroJudge Forum