源代码(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);
}
}