蓝桥杯:李白打酒

分析:

        寻找可行解,我们考虑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++;
      }
    }
}

答案是:

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值