1. 排列小球(C++,67%,TLE)

#include <iostream>
#include <vector>

using namespace std;

int bs[3];
int n;
int ans;
vector<int> tmp;

void dfs(int step) {
    if (tmp.size() == n) {
        ans += 1;
        return;
    }

    for (int i = 0; i < 3; i++) {
        if (bs[i] > 0 && i != tmp.back()) {
            tmp.push_back(i);
            bs[i] -= 1;
            dfs(step + 1);
            bs[i] += 1;
            tmp.pop_back();
        }
    }
}

void solve() {
    cin >> bs[0] >> bs[1] >> bs[2];
    n = bs[0] + bs[1] + bs[2];
    ans = 0;

    for (int i = 0; i < 3; i++) {
        if (bs[i] > 0) {
            tmp.push_back(i);
            bs[i] -= 1;
            dfs(1);
            bs[i] += 1;
            tmp.pop_back();
        }
    }
    cout << ans;
}

int main() {

    solve();

    //cout << endl;
    //system("PAUSE");
    return 0;
}