1.类似如下的题目
X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
D国最多可以派出1人。
E国最多可以派出1人。
F国最多可以派出3人。
那么最终派往W星的观察团会有多少种国别的不同组合呢?
2.通用解法代码
package test; import java.util.*; public class Main{ public static char[] cty="ABCDEF".toCharArray(); public static int[] count= {6,2,2,1,1,3}; public static int f(int k,int goal,String s) { int left=0; for(int i=k;i<cty.length;i++) left+=count[i]; if(left<goal) return 0; if(goal==0) { System.out.println(s); return 1; } int a=0; for(int i=0;i<=count[k]&&i<=goal;i++) { StringBuilder sb=new StringBuilder(s); for(int j=0;j<i;j++) sb.append(cty[k]); count[k]-=i; a+=f(k+1,goal-i,sb.toString()); count[k]+=i; } return a; } public static void main(String[] args) { //A B C D E F: 4 2 2 1 1 3 System.out.println(f(0,5,"")); } public static int f4(int[] a, int k, int n, String s) { if(k==a.length){ if(n==0) {System.out.println(s); return 1;} return 0; } int total=0; String s2 = s; for(int i=0; i<=a[k]; i++){ total+=f4(a,k+1,n-i,s2); s2 += (char)(k+'A'); } return total; } }