源代码(java): public class Asist { static int count = 0; // 统计多少种数 public static void main(String[] args) { dfs(2, 0, 0, "");
System.out.println(count); }
// L 当时酒量, a遇店次数, b遇花次数, str表示途径轨迹 private static void dfs(int L, int a, int b, String str) { if (L < 0) return; if (a == 5 && b == 9 && L == 1) { count++; System.out.println(str+"b"); return; } if (a <= 5) dfs(L * 2, a+1, b, str+"a"); if (b <= 9) dfs(L - 1, a, b + 1, str+"b"); } } ------------------------------------------------------------------------------------------------------------------------------- public class Main { public static void main(String[] args) { int count = 0; // 记录多少种情况
int arr[] = new int [15]; // 15次偶遇中, 要么遇花(喝酒),要么遇店(打酒),, 穷举搜索 // 0表示遇店, 1 表示遇花。 for (arr[0] = 0; arr[0] < 2; arr[0]++) for (arr[1] = 0; arr[1] < 2; arr[1]++) for (arr[2] = 0; arr[2] < 2; arr[2]++) for (arr[3] = 0; arr[3] < 2; arr[3]++) for (arr[4] = 0; arr[4] < 2; arr[4]++) for (arr[5] = 0; arr[5] < 2; arr[5]++) for (arr[6] = 0; arr[6] < 2; arr[6]++) for (arr[7] = 0; arr[7] < 2; arr[7]++) for (arr[8] = 0; arr[8] < 2; arr[8]++) for (arr[9] = 0; arr[9] < 2; arr[9]++) for (arr[10] = 0; arr[10] < 2; arr[10]++) for (arr[11] = 0; arr[11] < 2; arr[11]++) for (arr[12] = 0; arr[12] < 2; arr[12]++) for (arr[13] = 0; arr[13] < 2; arr[13]++) for (arr[14] = 0; arr[14] < 2; arr[14]++) out: { int num = 2; // 2升酒 // 模拟遇店打酒, 遇花喝酒 for (int i = 0; i < arr.length; i++) { if (arr[i] == 0) num *= 2; // 打酒 else { if (num < 0) break out; // 如果没有酒了,喝不了,不满足 else num -= 1; // 喝酒 } }
// 1. 所有情况中必须 5次 0, 10次1 // 2. 最后一次必须要是 1, 必须喝光。 (ps: 去年我就是死在这种情况上了!) if (num == 0 && arr[14] == 1) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } if (sum == 10) { count++; for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } } } // 总数 System.out.println(count); } }