题目来源:蓝桥杯2022初赛 C++ B组I题

题目描述
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店 N 次,遇到花 M 次。
已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白这一路遇到店和花的顺序,有多少种不同的可能?
注意:壶里没酒( 0 斗) 时遇店是合法的,加倍后还是没酒;但是没酒时遇花是不合法的。

输入格式
输入包含多组测试数据。
第一行为T,表示存在T组测试数据,T不超过30。
对于每组测试数据,输入两个整数N 和M.
1 ≤ N, M ≤ 100。

输出格式
输出一个整数表示答案。由于答案可能很大,输出模1000000007 的结果。

输入样例
1
5 10

输出样例
14

数据范围与提示
如果我们用 0 代表遇到花,1 代表遇到店,14 种顺序如下:
010101101000000
010110010010000
011000110010000
100010110010000
011001000110000
100011000110000
100100010110000
010110100000100
011001001000100
100011001000100
100100011000100
011010000010100
100100100010100
101000001010100

问题分析
DP题,不解释。
蓝桥杯官网的输入数据只有一组。

AC的C语言程序(蓝桥杯官网)如下:

/* LQ0069 李白打酒加强版 */#include <stdio.h>
#include <string.h>#define MOD 1000000007
#define N 100 + 1
long long dp[N * 2][N][N];    /* 店,花,酒 */int main()
{int n, m;scanf("%d%d", &n, &m);memset(dp, 0, sizeof dp);dp[0][0][2] = 1;for (int i = 0; i <= n; i++)for (int j = 0; j <= m; j++)for (int k = 0; k <= m; k++) {if (i && k % 2 == 0)dp[i][j][k] += dp[i - 1][j][k / 2]; /* 遇到店 */if (j)dp[i][j][k] += dp[i][j - 1][k + 1]; /* 遇到花 */dp[i][j][k] %= MOD;}printf("%lld\n", dp[n][m - 1][1]);return 0;
}

AC的C语言代码如下:

/* LQ0069 李白打酒加强版 */#include <stdio.h>
#include <string.h>#define MOD 1000000007
#define N 100 + 1
long long dp[N * 2][N][N];    /* 店,花,酒 */int main()
{int t, n, m;scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);memset(dp, 0, sizeof dp);dp[0][0][2] = 1;for (int i = 0; i <= n; i++)for (int j = 0; j <= m; j++)for (int k = 0; k <= m; k++) {if (i && k % 2 == 0)dp[i][j][k] += dp[i - 1][j][k / 2]; /* 遇到店 */if (j)dp[i][j][k] += dp[i][j - 1][k + 1]; /* 遇到花 */dp[i][j][k] %= MOD;}printf("%lld\n", dp[n][m - 1][1]);}return 0;
}

LQ0069 李白打酒加强版【DP】相关推荐

  1. 蓝桥杯1——李白打酒加强版

    解题思路 本题目第一想法是使用递归,但是使用递归后超时,只能另寻他法. 通过使用三维数组,前两位分别代表遇到的店和花的数量,第三位代表当前酒的余量,根据三维数组分析情况,对情况进行累加,即采用线性规划 ...

  2. 第十三届蓝桥杯省赛I:李白打酒加强版

    先看一下题目吧 样例说明 分析: 看题目还是很容易想到要用动态规划的,题目要求的是求遇到遇到花的次数i=N.遇到店的次数j=M.且剩余酒的量k=0斗的情况有多少种. 由此我们的思路就很容易确定了,即设 ...

  3. 李白打酒c语言编程,搞定了“李白打酒”,还原问题都迎刃而解

    文|刷刷 图|自制&火花课件 李白街上走,提壶去打酒:遇店加一倍,见花喝一斗,三遇店和花,喝光壶中酒.试问酒壶中,原有多少酒? "李白打酒"是我国民间自古以来广为流传的一道 ...

  4. 2014\Province_C_C++_B\3 李白打酒

    题目:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次, ...

  5. 蓝桥杯 2014本科C++ B组 李白打酒 三种实现方法 枚举/递归

    标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次, ...

  6. 2014蓝桥杯:李白打酒;奇怪的分式(枚举,最大公约数)

    三.题目:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5 ...

  7. 梅森素数、猜年龄、啤酒饮料、武功秘籍、调和级数、李白打酒、猜字母、扩散、三升序列、寻找2020

    梅森素数 题目 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + ...

  8. 李白打酒 话说大诗人李白,一生好饮。幸好他从不开车。

    package org.bluebridge.topics;/*李白打酒话说大诗人李白,一生好饮.幸好他从不开车.一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱:无事街上走,提壶去打酒.逢店 ...

  9. 蓝桥杯——真题训练之李白打酒

    标题:李白打酒     话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到 ...

最新文章

  1. 让更多声音参与改变,美团外卖“订单分配”算法公开
  2. 择天记手游的服务器维护世界,1130停服更新公告
  3. 基于SOA的体系架构设计
  4. java基础之HashTable和HashMap的区别
  5. 【做题记录】人类智慧
  6. Kafka的10道基础面试题
  7. 想知道3D游戏建模师每天都在做什么吗?3D游戏建模的那些事
  8. 九度笔记之 1209最小邮票数
  9. c#程序实现调用迅雷
  10. 大数据电商数仓分析项目
  11. “叔叔,你来监考了!”
  12. 微软云服务器的优点,探寻:微软私有云的优势究竟是什么
  13. pojo和vo的含义
  14. PASCAL VOC数据集-可以了解一下
  15. adb 连接安卓手机远程调试
  16. 【Go语言学习】安装与配置
  17. 二、TensorFlow2.x 基于图像的分类
  18. Hadoop的两个核心组成
  19. JS 取Json数据中对象特定属性值
  20. 获取股票历史数据和当前数据的API

热门文章

  1. Rust:用问号 ?操作符简化错误信息的判断
  2. SpringBoot+Vue项目在线学生请假管理系统
  3. 详解Qt字体设置 (QFont)
  4. android4.3从app到kernel代码追踪gsensor所遇到的问题
  5. Day 3 Linux(目录篇 、文件操作篇 、压缩解压相关命令, 编辑器vi 、编译器gcc 、调试器gdb、 makefile工程管理器初学)
  6. java会员卡管理系统下载_基于jsp的会员卡管理系统-JavaEE实现会员卡管理系统 - java项目源码...
  7. 2020-09-06
  8. goland试用期过后继续使用方式
  9. 报错解决:Reason: Failed to determine a suitable driver class
  10. apex 查询_APEX初步 [5] —— SOQL查询