[蓝桥杯 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;
}
相关推荐
酉鬼女又兒21 分钟前
零基础入门前端JavaScript 核心语法:var/let/const、箭头函数与 setTimeout 循环陷阱全解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·蓝桥杯
念越9 小时前
蓝桥杯17届功能测试模拟1期题目及解析(1)
功能测试·蓝桥杯·测试用例·场景法
计算机安禾13 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
酉鬼女又兒18 小时前
入门前端CSS 媒体查询全解析:从入门到精通,打造完美响应式布局(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·前端框架·html5·媒体
小则又沐风a19 小时前
[蓝桥杯 2014 省 AB] 蚂蚁感冒
算法·职场和发展·蓝桥杯
云泽80820 小时前
蓝桥杯算法精讲:从宏观角度重新认识递归
算法·职场和发展·蓝桥杯
仰泳的熊猫20 小时前
题目2576:蓝桥杯2020年第十一届省赛真题-解码
数据结构·c++·算法·蓝桥杯
24白菜头1 天前
第十五届蓝桥杯C&C++大学B组
数据结构·c++·笔记·学习·算法·leetcode·蓝桥杯
wengqidaifeng1 天前
备战蓝桥杯----C/C++组 (一)数据结构与STL讲解(上):顺序表、链表、栈与队列——从手写到调用,一文搞懂四种线性结构
c语言·数据结构·蓝桥杯
酉鬼女又兒1 天前
零基础入门前端JavaScript 基础语法详解(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·chrome·蓝桥杯