输入输出样例
输入
3 6 0
输出
3
样例说明
用 r 表示红球,g 表示绿球,可能的方案包括:
rrrgggggg
grrrggggg
ggrrrgggg
参考代码
import java.util.Scanner;
public class PailieXiaoqiu {
public static int[]a=new int[3];
public static int res=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int sum=0;
for(int i=0;i<3;i++){
a[i]=scan.nextInt();
sum+=a[i];
}
dfs(sum,0,-1);
System.out.print(res);
}
//x表示上次统计后相同小球的个数
public static void dfs(int sum,int x,int last){
//退出条件,当小球个数全部用完说明一种情况排好序了,方案数加1
if(sum==0){
res++;
return;
}
for(int i=0;i<3;i++){
//如果与上次用的小球颜色一样,跳过继续循环
if(i==last) continue;
//j表示,本次用的相同颜色小球的个数,要比上次多一个,因为是增序,
//但不能超过本次所用颜色的小球的个数
for(int j=x+1;j<=a[i];j++){
a[i]-=j;//用过的减掉
if(sum>=j)dfs(sum-j,j,i);
a[i]+=j; //回溯算法常用于类似排列组合的题中
}
}
}
}