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

动态规划(三维)直接按照题目条件

竞赛中心 - 蓝桥云课

#include <iostream>
#define int long long
const int A=101;
using namespace std;
const int MOD=1000000007;
int dp[A][A][A];
signed main()
{// 请在此输入您的代码int N,M;cin>>N>>M;dp[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>0&&k%2==0){dp[i][j][k]+=dp[i-1][j][k/2]%MOD;}if(j>0&&k>0){dp[i][j][k]+=dp[i][j-1][k+1]%MOD;}}}}cout<<dp[N][M-1][1]%MOD<<endl;return 0;
}

题目中有三个变化量,店数,花数,酒数,设dp[i][j][k]表示在遇到i个店,j个花后还剩k个酒的方案数。

状态转移方程:

        if(i>0&&k%2==0){dp[i][j][k]+=dp[i-1][j][k/2]%MOD;}if(j>0&&k>0){dp[i][j][k]+=dp[i][j-1][k+1]%MOD;}

第一种情况:dp[i][j][k]时的方案总数等于此时的方案总数加上遇到店减一时且酒数减半的方案数(这种情况的限定条件是店数大于0,k是2的倍数,防止数组错误)

第二种情况:dp[i][j][k]时的方案总数等于此时的方案总数加上遇到花减一且酒数加一的方案数(这种情况的限定条件是j与k都大于0)

http://www.dtcms.com/a/323516.html

相关文章:

  • 基于STM32H5的循环GPDMA链表使用
  • Redis 事务机制
  • java基础(六)jvm
  • Vue3 路由
  • Chaos Monkey 故障注入工具使用介绍
  • Day37--动态规划--52. 携带研究材料(卡码网),518. 零钱兑换 II,377. 组合总和 Ⅳ,57. 爬楼梯(卡码网)
  • Web前端之 ECMAScript6
  • 【ros_humble】3.人脸检测python(服务通讯和参数通讯介绍)
  • 关于Linux软件编程1
  • leetcode 128. 最长连续序列 - java
  • 【网络与爬虫 51】Scrapy-Cluster分布式爬虫集群:企业级大规模数据采集解决方案
  • 卷积神经网络学习
  • 新手小白使用jQuery在实际开发中常用到的经验
  • 讯飞晓医-讯飞医疗推出的个人AI健康助手
  • 初学python的我开始Leetcode题15-2
  • Web自动化技术选择
  • SpringBoot日志关系
  • 【能碳建设1】用AI+开源打造物联网+能碳管理+交易SaaS系统的最短路径实施指南
  • C#:dnSpy
  • 【密码学】7. 数字签名
  • 聚众识别误报率↓78%:陌讯动态密度感知算法实战解析
  • CentOS7编译安装GCC
  • Python基础教程(六)条件判断:引爆思维Python条件判断的九层境界
  • Java Stream流详解:用法与常用API实战
  • Kotlin 协程线程切换机制详解
  • 规划是自动驾驶的“头脑”
  • 灰度测试(灰度发布、金丝雀发布)
  • 推荐系统学习笔记(十一)预估分数融合
  • leetcode-C语言-3479.水果成篮 III
  • C++ vector类