分析:
寻找可行解,我们考虑DFS的单条路径。这条路径上有两种可能,一种是你的步数*2,一种是你的步数-1,那么只需要求出有多少种走法能让你步数为0。
最后一步肯定是步数-1,也就是题目中的遇到花。所以我们在这条路径上布置5个步数*2,9个步数-1,然后搜索它的可行解。
所以我们这条路径的最后一个节点肯定是步数-1,那么我们走的时候只需要进行5次步数*2和9次步数-1,然后判断剩下的酒是不是1就行。
用DFS搜索这条路径所有满足条件的解即可。
与这题类似的:蓝桥杯:第39级台阶。这里是用二叉树的思路进行的分析
Java:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
static int sum = 0;
public static void main(String[] args) {
//店的数量,花的数量,和初始的酒数量
dfs(5,9,2);
System.out.println(sum);
}
public static void dfs(int m,int n,int wine){
//先遇到店
if(m>0){
dfs(m-1,n,wine*2);
}
//在遇到花店
if(n>0){
dfs(m,n-1,wine-1);
}
//如果店走完了,花也走完了(剩一个是最后的),因为最后遇见的肯定是花,所以我们要留一斗酒
if(m==0 && n==0 && wine==1){
sum++;
}
}
}
答案是: