【DP】第十三届蓝桥杯省赛C++ B组《李白打酒加强版》(C++)

【题目描述】

话说大诗人李白,一生好饮。

幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。

他边走边唱:

无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店 N 次,遇到花 M 次。

已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白这一路遇到店和花的顺序,有多少种不同的可能?

注意:壶里没酒 (0 斗) 时遇店是合法的,加倍后还是没酒;但是没酒时遇花是不合法的。

【输入格式】

第一行包含两个整数 N 和 M。

【输出格式】

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

【数据范围】

对于 40% 的评测用例:1≤N,M≤10。
对于 100% 的评测用例:1≤N,M≤100。

【输入样例】

5 10

【输出样例】

14

【样例解释】

如果我们用 0 代表遇到花,1 代表遇到店,14 种顺序如下:

010101101000000
010110010010000
011000110010000
100010110010000
011001000110000
100011000110000
100100010110000
010110100000100
011001001000100
100011001000100
100100011000100
011010000010100
100100100010100
101000001010100

【思路】

关键是酒的数量不可能多于遇到花的次数,否则不可能喝光酒。

状态表示:f[i][j][k],i 表示当前遇到店的数量、j 表示当前遇到花的数量,k 表示当前酒的数量。

状态属性:当前所有数量的集合。

状态表示:当前f[i][j][k]刚遇到店还是刚遇到花,f[i][j][k] = f[i-1][j][k/2] + f[i][j-1][k+1]

【代码】

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 110, MOD = 1e9 + 7;int n, m;
int f[N][N][N];int main()
{cin >> n >> m;//初始状态:没遇到店和花,有2斗酒f[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 ++ ){//把当前值赋给变量是为了代码简洁,需要加上 & 才能保证取出原数组中元素的地址。int& v = f[i][j][k];//刚遇到的是店,需要判断 i >= 1 并且花是偶数if (i && k % 2 == 0) v = (v + f[i - 1][j][k / 2]) % MOD;//刚遇到的是花,需要判断 j >= 1if (j) v = (v + f[i][j - 1][k + 1]) % MOD;}//最后的状态即为遇到花后,酒刚好喝完。cout << f[n][m - 1][1] << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何准备2024年汉字小达人:历年考题练一练-18道选择题解析

距离2024年第11届汉字小达人比赛还有七个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#xff0c…

Mybatis之自定义映射resultMap

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

基于springboot+vue的失物招领平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

更智能的广告素材生成!看A/B测试如何驱动AIGC素材调优

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 前言&#xff1a;AIGC 大爆发&#xff0c;引发广告营销行业变革 ChatGPT 等 AI 产品引发的 AIGC 大爆发引起了各行业的震动&#xff0c;其中以图片生成甚至视频生成…

操作系统:malloc与堆区内存管理

malloc是函数而不是系统调用&#xff0c;他的底层是同调调用brk和mmap这两个系统调用实现功能的&#xff0c;具体选择brk还是mmap要看申请的空间大小以及malloc中的阈值&#xff08;一般是128kb&#xff09; 注意申请的空间只有使用才会触发缺页中断映射到物理内存 不理解的话先…

现货黄金做对冲的具体方法

现货黄金做对冲的具体方法是运用金融衍生工具和策略&#xff0c;以减轻或消除持有现货黄金所面临的市场风险。具体而言&#xff0c;投资者可通过期货合约、期权、掉期等金融工具来实现对冲&#xff0c;保障其投资价值不受金价波动的负面影响。 &#xfeff; 期货合约在对冲中…

Ceres求解非线性优化问题步骤与示例

【版权声明】 本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 在计算机视觉和机器人领域&#xff0c;经常需要解决非线性优化问题来估计相机姿态或运动模型。Ceres Solver是一个开源的C库&#xff0c;专门用于解决最小二乘问题&am…

HarmonyOS/OpenHarmony应用开发-HDC环境变量设置

hdc&#xff08;HarmonyOS Device Connector&#xff09;是 HarmonyOS 为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在 windows/linux/mac 系统上与真实设备或者模拟器进行交互。 hdc 工具通过 HarmonyOS SDK 获取&#xff0c;存放于 /Huawei/Sdk/openhar…

C++:指针 引用 普通变量适用场景

什么时候用指针 什么时候用引用 什么时候用普通变量 在C中&#xff0c;我们可以根据不同的需求选择使用指针、引用或普通变量。 使用指针的情况&#xff1a; 指针是一个变量&#xff0c;它存储了一个内存地址。我们可以使用指针来间接访问和修改内存中的数据。以下是一些使用…

sde的几个问题

数据库:aix6.1oracle11.2.0.1 sde数据为从原先oracle10.2.0.5中导入的。 环境&#xff1a;windows2008x64 安装sde10 for oracle11g x64oracle11.2.0.1x64客户端。 启动出现问题&#xff1a; ST_Geometry Schema Owner: (SDE) Type Release: 1007 Instance initialized fo…

5.1.7、【AI技术新纪元:Spring AI解码】Mistral AI Chat

Mistral AI 聊天 Spring AI 支持 Mistral AI 的各种 AI 语言模型。您可以与 Mistral AI 语言模型进行互动,并基于 Mistral 模型创建多语言对话助手。 先决条件 您需要创建一个与 MistralAI 的 API 以访问 Mistral AI 语言模型。在 MistralAI 注册页面创建账户并在 API Keys…

零基础学python:17、课后练习作业

课后练习 #1.写一个装饰器,传入一个函数,测量一下这个函数的运行时间 import time def wrapper(func):def run(*args,**kwargs):start = time.time()func(*args

HTTP协议初识

HTTP协议 HTTP协议简介与作用HTTP基本工作原理非持久连接与持久连接的区别HTTP请求与响应HTTP请求HTTP响应请求与响应的交互流程 HTTP方法实例GET 请求示例POST 请求示例HEAD 请求示例 使用场景 HTTP状态码HTTP消息结构与头字段头字段 HTTP的无状态性与状态管理初步了解安全性与…

C++(4): std::ofstream的使用

1. ofstream 之前讲到&#xff0c;ifstream具有将文件从硬盘中读进内存的功能。而ofstream则是执行反操作&#xff0c;它提供了将文件从内存写入磁盘的功能。 std::ofstream 是 C 标准库中用于文件输出的类&#xff0c;它提供了向文件写入数据的能力。std::ofstream 属于 <…

559: 字符串排序(python)

收藏 难度&#xff1a;一般 标签&#xff1a;暂无标签 题目描述 在对字符串的排序中&#xff0c;往往具有不同的规则来判断字符串的大小先后。这里有两种比较常见的规则&#xff1a; 1&#xff0e; 首先按字符串长度进行排序&#xff0c;对长度相同的字符串&#xff0c;按字…

力扣热门算法题 56. 合并区间,57. 插入区间,58. 最后一个单词的长度v

56. 合并区间&#xff0c;57. 插入区间&#xff0c;58. 最后一个单词的长度&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.20 可通过leetcode所有测试用例。 目录 56. 合并区间 解题思路 完整代码 Python Java ​编辑 5…

MCU技术的创新浪潮与产业变革

MCU技术的创新浪潮与产业变革 一、MCU技术的创新发展 MCU&#xff0c;即微控制器&#xff0c;作为现代电子设备的核心部件&#xff0c;一直在不断地创新与发展。随着科技的进步&#xff0c;MCU的性能得到了极大的提升&#xff0c;功能也越来越丰富。从8位到32位&#xff0c;再…

G1和ZGC垃圾回收器学习

前言 ​ 随着JDK17的占有率不断升高和SpringBoot3最低支持JDk17&#xff0c;JDK17很大概率会成为大家后续升级的一个选择&#xff0c;而JDK17上最重要的垃圾回收器G1和ZGC&#xff0c;也就显得格外重要。大家提前了解或者学习一下肯定是有用的。 ​ 本篇文章也默认大家了解一…

C语言学习笔记

基础语法 注释 int main() {//这是单行注释 /** 多行注释*/ }变量 变量声明 格式&#xff1a;type name int main() {//变量的声明int num;//变量使用num1;//声明多个变量int num1,num2;//变量的初始化int num31;} int num&#xff1b; num10&#xff1b; 常量 const dou…

单片机学到什么程度才可以去工作?

单片机学到什么程度才可以去工作? 如果没有名校或学位的加持&#xff0c;你还得再努力一把&#xff0c;才能从激烈的竞争中胜出。以下这些技能可以给你加分&#xff0c;你看情况学&#xff0c;不同行业对这些组件会有取舍: . Cortex-M内核:理解MCU内核各部件的工作机制&#…