题目来源:蓝桥杯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. Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
  2. TalkingData:2014年移动打车应用行业报告
  3. linux 页面内容输出,Node.js 一个简单的页面输出
  4. C++ 预编译头文件
  5. 6.824 Raft lesson4 2020(一)
  6. p6 软件 服务器没有项目了,前后端分离项目一台服务器上线
  7. Vivado设计流程(四)设计综合
  8. java底层模型_Java I/O模型及其底层原理,夯实你的开发基础
  9. QT中如何固定窗口的大小?
  10. windows系统开机自动扫描硬盘的原因及解决方法
  11. UMTS语音通话问题定位分析
  12. seo模拟点击软件_浅谈百度SEO快排是什么、原理、如何判断及应对
  13. pandas -- 基础操作(六):数据分组及透视表,df.groupby、pd.pivot,、pd.pivot_table、stack(堆叠)、 unstack(不堆叠)
  14. 一阶广义差分模型_广义差分法的eviews软件实现
  15. 【Unity3D脚本】Transform类
  16. oracle索引 oracle索引结构 oracle索引使用 B*Tree索引
  17. iOS NSDate与NSTimeInterval之间的互转
  18. 如何做好硕士论文的排版
  19. dsp 精准投放_招商加盟行业如何精准获客
  20. Vue官方文档梳理-全局API

热门文章

  1. C语言程序设计十个币,C语言程序设计复习(10页)-原创力文档
  2. 用go写一个docker(9)-初步构造容器
  3. 计算机函数公式大全ppt,三角函数公式大全分解.ppt
  4. wow登录服务器未响应,魔兽世界进不去 战网无法登陆和未响应怎么办
  5. java 建一个car_大学java习题 :定义一个汽车类car
  6. 漫画APP开发前景浅析
  7. 应用Microchip dsPIC芯片日志——烧录出现的问题
  8. Oracle数据库查询表中记录为空,Empty result set fetched
  9. 关于QA QE QC 测试职位的区别
  10. 元气骑士卡无限服务器,元气骑士养剑葫怎么卡无限飞剑bug方法介绍