题目描述
小蓝有黄绿蓝三种颜色的小球,分别为 R,G,B 个。同样颜色的小球没有区别。
小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t1,将接下来的连续小球个数记为 t2,以此类推直到最右边的小球。
请问,总共有多少总摆放小球的方案,使得t1,t2,⋯ 为严格单调递增序列,即 t1≤t2≤t3≤⋯。
输入描述
输入一行包含三个整数R,G,B。
其中,0≤R,G,B≤50。。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
3 6 0
输出
3
样例说明
用 r 表示红球,g 表示绿球,可能的方案包括:
rrrgggggg
grrrggggg
ggrrrgggg
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
import java.util.Scanner;
public class Main {
static int[] a=new int[3];
static int ans=0;
static int sum=0;
public static void main(String[] args) {
int sum=0;
Scanner scan = new Scanner(System.in);
for(int i=0;i<3;i++){
a[i]=scan.nextInt();
sum=sum+a[i];
}
dfs(sum,0,-1);//当前总数、上一次放了几个、上次放的颜色,-1标记还没放入球
System.out.println(ans);
scan.close();
}
public static void dfs(int sum,int num,int color){
if(sum==0){
ans++;
return;
}
for(int i=0;i<3;i++){//球的颜色,红色:0,绿色:1,蓝色:2
if(i==color){//如果两次放入相同颜色的球,就跳出此次for循环
continue;
}
for(int j=num+1;j<=a[i];j++){
a[i]=a[i]-j;
dfs(sum-j,j,i);
a[i]=a[i]+j;//回溯
}
}
}
}