排列小球
题目描述
小蓝有黄绿蓝三种颜色的小球,分别为 R, G, BR,G,B 个。同样颜色的小球没有区别。
小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t1,将接下来的连续小球个数记为 t2,以此类推直到最右边的小球。
请问,总共有多少总摆放小球的方案,使得t1,t2,⋯ 为严格单调递增序列,即
t1≤t2≤t3≤⋯。
输入描述
输入一行包含三个整数 R, G, BR,G,B。
其中0≤R,G,B≤50。
输出描述
输出一个整数,表示答案。
输入
3 6 0
输出
3
样例说明
用 r 表示红球,g 表示绿球,可能的方案包括:
rrrgggggg
grrrggggg
ggrrrgggg
运行限制
最大运行时间:1s
最大运行内存: 128M
code:
#include <iostream>
using namespace std;
int a,b,c;
int sum=0;
void dfs(int x,int y,int z,int len,int color)
{
if(x==0&&y==0&&z==0){
sum++;
}else{
for(int i=len+1;i<=x&&color!=0;i++){
dfs(x-i,y,z,i,0);
}
for(int i=len+1;i<=y&&color!=1;i++){
dfs(x,y-i,z,i,1);
}
for(int i=len+1;i<=z&&color!=2;i++){
dfs(x,y,z-i,i,2);
}
}
}
int main()
{
cin>>a>>b>>c;
dfs(a,b,c,0,0);
dfs(a,b,c,0,1);
dfs(a,b,c,0,2);
cout<<sum/2;
return 0;
}