#P1435. [递归入门]取球2

[递归入门]取球2

Description

现有6个球,2个A,3个B,1个C。

现在要从这6个球中取N个球,有几种取法?

例如,取3个球的取法有6种:

BBC

BBB

ABC

ABB

AAC

AAB

Input Format

N(1<=N<=6)

Output Format

可能的取法

3​
6​

Hint

#include <iostream>
using namespace std;
int ans=0;
int a[3] = {2,3,1};
int b[3];
void f(int cur,int left){//cur当前考虑的位置,goal:距离?标的余额
    if(cur == sizeof(b)/sizeof(int)){
        if(!left)
            ans += 1;
        return;
    }
    for(int i=0;i<=min(left,a[cur]);i++){
        b[cur] = i;
        f(cur+1,left-i);
    }
    b[cur] = 0;//回溯
}
int main(){
    int N;
    cin>>N;
    f(0,N);
    cout<< ans;
    return 0;
}

Source

递归