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

DP算法:动态规划算法

步骤

(1)确定初始状态

(2)确定转移矩阵,得到每个阶段的状态,由上一阶段推到出来

(3)确定边界条件。

例题

  1. 蓝桥杯——印章(python实现)

使用dp记录状态,dp[i][j]表示买i张印章,凑齐j种印章的概率

i表示买的印章数,j表示凑齐的印章种数

情况一:如果i<j,不可能凑齐印章,概率为0

情况二:如果j=1,dp[i][1] = n*((1/n)**i),凑齐一种印章,所有i个印章为一个种类,这一个种类有n种情况可选

情况三:凑齐j种印章。前面买了i-1个印章。可能前面i-1步凑够了j种印章,那么只用从j种里随意选出来一个dp[i-1][j]*j*p;可能前面i-1步凑够了j-1种印章,那么从剩下的n-j+1种里选出来一个dp[i-1][j-1]*(n-j+1)*p,因此为dp[i][j] = dp[i-1][j]*j*p+dp[i-1][j-1]*(n-j+1)*p

strs = input().strip().split()
n = int(strs[0])
m = int(strs[1])# 使用dp记录状态,dp[i][j]表示买i张印章,凑齐j种印章的概率
dp = [[0]*(n+1) for _ in range(m+1)]p = 1.0/nfor i in range(1,m+1):for j in range(1,n+1):# 如果i<j,不可能凑齐印章if i<j:dp[i][j] = 0# 如果凑齐一种印章elif j==1:dp[i][1] = n*(p**i)# 凑齐j种印章:可能前面i-1步凑够了j种印章,那么只用从j种里随意选出来一个;# 可能前面i-1步凑够了j-1种印章,那么从剩下的n-j+1种里选出来一个else:dp[i][j] = dp[i-1][j]*j*p+dp[i-1][j-1]*(n-j+1)*p
print('%.4f'%(dp[m][n]))

http://www.lryc.cn/news/37244.html

相关文章:

  • 一三四——一六七
  • day29_JS
  • 【HTTP协议与Web服务器】
  • Idea+maven+spring-cloud项目搭建系列--12 整合grpc
  • Revit开洞问题:结构专业开洞口剖面显示及一键开洞
  • 0107连通分量-无向图-数据结构和算法(Java)
  • [学习笔记]黑马程序员python教程
  • 如何配置用于构建 FastReport Online Designer 的 API ?
  • 【嵌入式Linux内核驱动】02_字符设备驱动
  • 【零散整理】
  • RocketMQ重复消费的症状以及解决方案
  • 数字化时代,企业的商业模式建设
  • 项目实战典型案例23——-注册上nacos上的部分服务总是出现频繁掉线的情况
  • 玩转金山文档 3分钟让你的文档智能化
  • 安装了nodejs怎么安装nvm
  • java安全编码规范考试
  • 表格检测识别技术的发展历程
  • 设计UI - Adobe xd对象介绍
  • 优思学院|精益生产中的“单件流”真的能够做到吗?
  • 移除元素问题解决方法------LeetCode-OJ题
  • JavaScript学习笔记(1.0)
  • FCN网络介绍
  • Idea+maven+spring-cloud项目搭建系列--11 整合dubbo
  • 2023年上半年北京杭州/广州深圳软考中/高级报名入口
  • jupyter notebook配置和使用
  • 【C++】通过stack、queue、deque理解适配器模式
  • JavaScript 高级实例集合
  • Flutter(五)容器类组件
  • 实现满屏品字布局
  • 软件测试-性能测试-基础知识