`
package 蓝桥杯题目;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class 排列小球 {
//由于下面生成的str数据可能重复,所以我们将其放入set去重,最后只需要输出set集合的size就是答案了
static Set<String> set=new HashSet<String>();
static char[] str;
static int R,G,B; //R,G,B分别表示红绿蓝球的数量
//n表示前一层小球个数,str是用来储存小球的数组,cur是str数组的当前的下标
public static void dfs(int R,int G,int B,int n,char[] str,int cur) {
if(R==0&&G==0&&B==0) {
String STR=new String(str);
set.add(STR);
return ;
}
for(int i=0;i<3;i++) { //第一层用来选择球的颜色
int t = 0; //t表示当前选的什么颜色的球的个数(当前剩下的个数)
if(i==0) t=R;
if(i==1) t=G;
if(i==2) t=B;
for(int j=1;j<=t;j++) { //第二层用来选择放多少个(j表示当前选取的个数)
if(j>n) {
if(i==0) R-=j;
if(i==1) G-=j;
if(i==2) B-=j;
//这里我们将选择了颜色的j个球全部放入str数组中
for(int q=0;q<j;q++) {
if(i==0) { //i==0表示当前选选择的是红球,将选择的j个球全部放入数组中
str[cur+q]='r';
}
if(i==1) {
str[cur+q]='g';
}
if(i==2) {
str[cur+q]='b';
}
}
dfs(R,G,B,j,str,cur+j);
//回溯操作
if(i==0) R+=j;
if(i==1) G+=j;
if(i==2) B+=j;
}
}
}
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
R=input.nextInt();
G=input.nextInt();
B=input.nextInt();
str=new char[R+G+B];
dfs(R,G,B,0,str,0);
System.out.println(set.size());
}
}