第十三届蓝桥杯C++B组省赛 I 题——李白打酒加强版 (AC)
admin
2024-04-07 11:50:57
0

目录

  • 1.李白打酒加强版
    • 1.题目描述
    • 2.输入格式
    • 3.输出格式
    • 4.样例说明
    • 5.数据规模
    • 6.原题链接
  • 2.解题思路
  • 3.Ac_code

1.李白打酒加强版

1.题目描述

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

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

无事街上走,提壶去打酒。 逢店加一倍, 遇花喝一斗。

这一路上, 他一共遇到店 NNN 次, 遇到花 MMM 次。已知最后一次遇到的是花,他正好把酒喝光了。

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

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

2.输入格式

5 10

3.输出格式

14

4.样例说明

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

010101101000000

010110010010000

011000110010000

100010110010000

011001000110000

100011000110000

100100010110000

010110100000100

011001001000100

100011001000100

100100011000100

011010000010100

100100100010100

101000001010100

5.数据规模

1≤N,M≤1001≤N,M≤1001≤N,M≤100

6.原题链接

李白打酒加强版

2.解题思路

比较明显是一道状态机dp的题目,如何定义好状态可以帮助我们更好地初始化和转移以及求解答案,根据题目范围最大为100,比较明显暗示我们做法是一个O(n3)O(n^3)O(n3)的dpdp状态也应该是三维的。定义状态f[i][j][k]f[i][j][k]f[i][j][k] 为已经遇到 iii 次店,jjj次花,还剩 kkk 斗酒的方案数。状态初始化明显是f[0][0][2]=1

对于酒的上限数量,我们应该想好范围,因为花最多只有 mmm 朵,意味着我们最多只能喝 mmm 壶酒,对于 kkk 超过 mmm 的状态都是无效状态我们无需关心。所以剩余酒的上限也就是 kkk 应该也定为 mmm 。

考虑进行状态转移,对于状态f[i][j][k]f[i][j][k]f[i][j][k],假设最后一次遇到的是店,那么此时需要保证 iii 大于0,并且 kkk 是偶数,因为遇到店剩余酒翻倍,kkk 一定不可能为奇数,那么可以得到转移方程
f[i][j][k]=(f[i][j][k]+f[i−1][j][k/2])%modf[i][j][k] = (f[i][j][k] + f[i - 1][j][k / 2]) \% modf[i][j][k]=(f[i][j][k]+f[i−1][j][k/2])%mod

假设最后一次遇到的是花,那么此时只需要保证 jjj 大于 0即可,我们可以获得转移方程f[i][j][k]=(f[i][j][k]+f[i][j−1][k+1])%modf[i][j][k] = (f[i][j][k] + f[i][j - 1][k + 1]) \% modf[i][j][k]=(f[i][j][k]+f[i][j−1][k+1])%mod

我们还得考虑答案输出什么,题目要求最后一次遇到的必须是花,那么我们直接输出 f[n][m][0]f[n][m][0]f[n][m][0] 肯定是错误的答案。 因为这并不能保证最后一次遇到的是花,因为最后是0壶酒,那么在遇到最后一朵花时应该还剩1壶酒,所以我们可以输出 f[n][m−1][1]f[n][m-1][1]f[n][m−1][1] 作为答案。

3.Ac_code

#include
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair PII;
#define pb(s) push_back(s);
#define SZ(s) ((int)s.size());
#define ms(s,x) memset(s, x, sizeof(s))
#define all(s) s.begin(),s.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 110;int n, m;
//已经遇到i次店,j次花,还剩k斗酒的方案数
LL f[N][N][N];
void solve()
{cin >> n >> m;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) {//最后一次遇到店if (i && k % 2 == 0) f[i][j][k] = (f[i][j][k] + f[i - 1][j][k / 2]) % mod;//最后一次遇到花if (j) f[i][j][k] = (f[i][j][k] + f[i][j - 1][k + 1]) % mod;}}}cout << f[n][m - 1][1] << '\n';
}
int main()
{ios_base :: sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}

相关内容

热门资讯

利润最高预计增长914%!光谷... 今年以来,光通信赛道持续景气。截至7月20日,光谷多家上市公司发布2026年半年度业绩快报显示,营收...
八年IPO长跑重启,南海农商行... 《星岛》见习记者 洪雨欣 深圳报道 等待八年,南海农商银行的A股上市之路迎新进展。 2026年6月...
公募基金2026年二季报全面解... 本篇看点 截至2026年二季度末,公募基金市场总规模约38.6万亿元,较上季度增长5.69%;基金数...
房地产市场出现积极变化 近年来,各地持续优化调整房地产政策,控增量、去库存、优供给,有序放宽购房限制,深化住房公积金制度改革...
【IPO追踪】年内港股最大IP... 近年来光通信企业在资本市场爆火,港股的剑桥科技(06166.HK)、海光芯正(01191.HK)等概...
收购2艘二手箱船,这家“新船东... 由厦门建发集团全资控股的集装箱航运企业Greta完成2艘支线集装箱船收购,持续扩张船队与航线布局。 ...
于东来深夜发文,称胖东来禁止员... 极目新闻记者 王柳钦 7月21日晚,胖东来创始人于东来在社交平台发文,分享胖东来保障幸福生活的制度,...
原创 关... 2026年7月以来,多组城市街景对比视频在各大社交平台持续发酵刷屏,不少网友实拍的城市老商业街、沿街...
万亿市值背后的资金洪流——A股... 7月21日,沪指重新站上3800点,科创50指数飙涨10.73%,AI概念股大幅回升,半导体、存储芯...
原创 别... 最近不少退休的粉丝私信问,手里攒了点养老钱,存银行定期跑不赢通胀,又怕炒股亏钱,该买点啥保值?今天就...
潍柴雷沃智慧农业三度递表港交所... 近日,潍柴雷沃智慧农业科技股份有限公司(以下简称“潍柴雷沃智慧农业”)向香港交易所递交主板上市申请,...
能源早报|中国石化氢能装备产业... 中国石化氢能装备产业集群建设正式启动 7月21日,据中国石化消息,石化机械氢能产业技术交流会暨数智氢...
港股收盘 | 三大指数集体走弱... 财联社7月22日讯(编辑胡家荣)港股三大指数震荡下行。截至收盘,恒生指数跌0.95%,报收24892...
财经调查|老铺黄金深圳门店金价... 深圳商报·读创客户端记者 周良成 7月21日,老铺黄金(HK06181)股价报374.4港元/股,上...
财政部:上半年证券交易印花税1... 来源:财政部网站 2026年上半年财政收支情况 一、全国一般公共预算收支情况 (一)一般公共预算收...
2026CBME,小熊电器正在... 随着00后家长全面接棒生育主力,母婴行业正经历从“粗放增长”到“高质量发展”的关键转型。在这个拐点上...
跨越山海的金融温度——兴业证券... 闽宁协作三十载,山海同心向共富。近日,记者跟随采访团走进兴业证券,探寻这家福建省属国有金融企业如何以...
WAIC大咖说|指尖上的“内卷... “瑞典科学家曾做过一个非常经典的实验,让人去做划火柴的操作,正常情况下只需要几秒钟,但当在他的手指尖...
4747万!大族激光董事长老婆... 来源:市场资讯 来源:财通社 香港豪宅市场回暖之际,一笔来自A股上市公司创始人家族的交易引发市场关注...