[蓝桥杯 2022 省 B] 李白打酒加强版

题目链接:

思路:

①定义dp数组,fijk,表示经过 i 店, 遇到 j 花, 还有 k 酒。如果酒的数量超过了花的数量,那么一定喝不完。因此,k 不能超过 M。

②从店推过来,fijk += fi-1jk/2,要保证 i-1 和 k/2 符合,所以 i >= 1 并且 k 能被2整除。

③从花推过来,fijk += fij-1k+1,要保证 j-1 和 k+1 符合,所有 j >= 1并且 k >= -1(省略,k一定大于0)。

④题目规定最后一定遇到花,并且刚好喝完酒,因此,输出 fnm-11

代码:

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 110, MOD = 1e9+7;

int n, m;
//dp数组
//表示经过i家店 j躲花 还剩下 k 酒
int f[N][N][N];

signed main(){
    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-1][j][k/2];
                    f[i][j][k] %= MOD;
                }
                if(j){
                    f[i][j][k] += f[i][j-1][k+1];
                    f[i][j][k] %= MOD;
                }
            }
        }
    }
    
    cout << f[n][m-1][1] << endl;
    return 0;
}
相关推荐
嘿黑嘿呦21 小时前
chap 8排序
算法·蓝桥杯·排序算法·软件工程
林森lsjs3 天前
【日耕一题】5. 青春常数(17届蓝桥杯C++B组第一题)
算法·蓝桥杯
Y_Bk3 天前
第十七届蓝桥杯C/C++A组省赛
c语言·数据结构·c++·算法·蓝桥杯
2601_961845427 天前
高考真题试卷电子版|2025高考全科试卷分类下载
考研·面试·蓝桥杯·远程工作·程序员创富·高考
汉克老师9 天前
GESP6级C++考试语法知识(五十五、动态规划----背包问题(八、混合背包)
c++·动态规划·dp·背包问题·gesp六级·混合背包问题
2601_9611940211 天前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene
h_a_o777oah11 天前
2026 蓝桥杯软件 C++B组 国赛比赛经历及备赛建议
c++·经验分享·算法·蓝桥杯
迈巴赫车主12 天前
蓝桥杯21241灯塔java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯·动态规划
大学竞赛君12 天前
第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
python·职场和发展·蓝桥杯
此生决int13 天前
算法从入门到精通——字符串
数据结构·c++·算法·蓝桥杯