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

题目链接:

思路:

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

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

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

④题目规定最后一定遇到花,并且刚好喝完酒,因此,输出 f[n][m-1][1]。

代码:

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;
}
相关推荐
Dream it possible!2 天前
蓝桥杯_工作时长_C++
c++·蓝桥杯·竞赛
wuqingshun3141592 天前
蓝桥杯 云神的子数组和
算法·蓝桥杯·图论
_OP_CHEN3 天前
【算法基础篇】(四十八)突破 IO 与数值极限:快速读写 +__int128 实战指南
c++·算法·蓝桥杯·算法竞赛·快速读写·高精度算法·acm/icpc
_OP_CHEN4 天前
【算法基础篇】(四十七)乘法逆元终极宝典:从模除困境到三种解法全解析
c++·算法·蓝桥杯·数论·算法竞赛·乘法逆元·acm/icpc
No0d1es4 天前
2025年第十六届蓝桥杯青少组省赛 Python编程 初/中级组真题
python·蓝桥杯·第十六届·省事
仰泳的熊猫4 天前
题目1109:Hanoi双塔问题
数据结构·c++·算法·蓝桥杯
王老师青少年编程6 天前
2025年3月GESP真题及题解(C++七级): 图上移动
c++·题解·dp·真题·gesp·七级·图上运动
智者知已应修善业6 天前
【C语言 dfs算法 十四届蓝桥杯 D飞机降落问题】2024-4-12
c语言·c++·经验分享·笔记·算法·蓝桥杯·深度优先
wuqingshun3141597 天前
蓝桥杯 缺页异常2【算法赛】
算法·职场和发展·蓝桥杯
2301_800895108 天前
hh的蓝桥杯每日一题(交换瓶子)
职场和发展·蓝桥杯