当前位置: 首页 > news >正文

[蓝桥杯 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]。

代码:

#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;
}

相关文章:

  • 工业制造各个系统术语
  • 提升Windows安全的一些措施
  • 死锁 手撕死锁检测工具
  • DDR中的delay line
  • doris基础使用
  • 汽车CAN总线采样点和采样率详解
  • openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1
  • Linux 学习笔记(5)路径知识详解:绝对路径、相对路径与特殊路径符(期末、期中复习必备)
  • 对比 HashMap 和 ConcurrentHashMap 扩容逻辑的差异
  • struct结构体、union联合体和枚举
  • 第1节:计算机视觉发展简史
  • python headq包介绍
  • 重组人碱性成纤维细胞生长因子 (rh-bFGF)-促进组织/伤疤修复
  • JAVA 双括号初始化
  • 消防设施操作员考试重点考哪些内容呢?
  • Byte-Buddy系列 - 第2讲 方法拦截与委托实现
  • 1ll C++
  • STM32F407使用ESP8266连接阿里云并上传数据
  • MySQL【8.0.41版】安装详细教程--无需手动配置环境
  • 热Key问题及其解决方案:Redis高并发场景下的性能优化
  • 企业网站源码库/怎么提交百度收录
  • 学校网站建设评估/windows优化大师怎么下载
  • wordpress主题xiu5.6/seo收费低
  • 短视频网站怎么建设/湘潭网络推广
  • 2015做网站前景/网站关键词快速排名技术
  • 情侣手表网站/培训心得体会300字