字母组合

题目描述: 由 A,B,C 这3个字母就可以组成许多串。 比如:“A”,“AB”,“ABC”,“ABA”,“AACBB” … 现在,小明正在思考一个问题: 如果有a个A,b个B,c个C 字母,能组成多少个不同的长度为n的串呢?

using namespace std;
const int N = 1e6 + 10;
char s[N];
bool t[N][4];
int n;
int ans;
int a, b, c;
int dfs(int u, int a, int b, int c) {
	if (u > n) {
		ans ++;
//		for(int i = 1; i <= u; i ++)cout <<s[i];
//		cout <<endl;
		return 0;
	}
	for (int i = 1; i <= 3; i ++) {
		if (a != 0 && t[u][1] == false && i == 1) {
			t[u][1] = true;
			dfs(u + 1, a - 1, b, c);
			t[u][1] = false;
		}
		if (b != 0 && t[u][2] == false && i == 2) {
			t[u][2] = true;
			s[u] = 'B';
			dfs(u + 1, a, b - 1, c);
			t[u][2] = false;
		}
		if (c != 0 && t[u][3] == false && i == 3) {
			t[u][3] = true;
			s[u] = 'C';
			dfs(u + 1, a, b, c - 1);
			t[u][3] = false;
		}
	}


}
int main() {

	cin >> a >> b >> c >> n;
	dfs(1, a, b, c);
	cout << ans << endl;
}
全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务