最近在刷蓝桥杯题目,按题目做一下笔记整理,顺便分享交流一下,有更好的解决方案欢迎大家共同提出探讨,以下源代码为系统提交满分答案

印章

问题描述

资源限制
Python时间限制:5.0s
问题描述
共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。
输入格式
一行两个正整数n和m
输出格式
一个实数P表示答案,保留4位小数。
样例输入
2 3
样例输出
0.7500
数据规模与约定
1≤n,m≤20

源代码

n,m = map(int,input().split())
#  创建二位数组
'''创建m+1行 n+1列的二维数组输入4 3dp = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
'''
dp = [[0 for i in range(n + 1)] for i in range(m + 1)]
for i in range(1 , m + 1):for j in range(1 , n + 1):if i < j :dp[i][j] = 0elif j == 1:dp[i][j] = pow(1 / n ,i - 1)else:dp[i][j] = dp[i-1][j] * (1/n) * j + dp[i-1][j-1] * (1/n)*(n-(j-1))print("{:.4f}".format(dp[m][n]))

问题分析

该题为经典的DP(动态规划)问题,需要使用DP(动态规划)思想解决
什么是DP(动态规划)呢?
用非人话说,DP基本性质:
1、问题具有最优⼦结构性质:问题所包含的⼦问题的解也是最优的。
2、⽆后效性:算⼀步是⼀步,只会存储当前的运算结果。为下⼀步计算提供结果。
DP的解题核心:写出递归问题的转移⽅程并确定转移⽅程的边界条件。
用人话转述就是:一个问题可以被分解为诸多子问题,每一个求解结果都依赖于上一步的结果,同时在计算中需要注意边界值的判断

本题需要分情况考虑,初步思考为:
1.需要集齐的印章数 > 购买的印章的数量
2.需要集齐印章数为1,购买的印章数量为1
3.需要集齐印章数为1,购买的印章数量大于1
4.其它情况
下面进行具体分析:
1.当需要集齐的印章数 > 购买的印章的数量时,此时是不可能集齐的,P必定为0
2.当需要集齐的印章数为1,购买的印章数量为1时,此时我们购买的那一张印章一定为唯一的那一种图案,P必定为1
3.当需要集齐印章数为1,购买的印章数量大于1时,假设购买的印章为4张(i=4):
第一张必定抽取到唯一的印章图案,P为1;第二张需要从n种印章中抽取刚才抽取的那一种图案,因此需要乘1/n(n为印章图案总数);第三张仍需要从n种印章中抽取刚才抽取的那一种图案,因此再乘1/n;第四张同理。因此,当需要集齐印章数为1,购买的印章数量大于1时,P = (1/n)^(i-1)

4.其它情况下,又可分为两种子情况:
(1)抽取的印章图案为已有的图案(重复)
假设在购买3张时已经集齐了三种印章图案(i=3,j=3),那么下一张一定会出现已拥有三种图案中的一种,也就是只能从n中抽取已存在的三张,由i,j之间的关系推出这种情况的概率为dp[i-1][j]*(1/n)*j

(2)抽取的印章图案为新的图案
假设印章图案还没有收集完成,那么此时抽取的印章便为新的印章图案,只能从未抽取过的n-(j-1)个图案中进行选择(-1是因为本次抽取还没有完成,因此本次的印章不用减掉,被减数j需要-1 -> 也可以理解成减掉j后把本次的印章加上,再加一 n-j+1),由i,j之间的关系推出这种情况的概率为dp[i-1][j-1]*(1/n)*(n-(j-1))

将两种情况相加就是dp[i][j]的概率,在进行一番循环计算后,只需要输出二位数组的最后一位数dp[m][n],即我们所需要求的概率

测评结果


更多题目,点击查看

【Python蓝桥杯】印章 共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。相关推荐

  1. [蓝桥杯python] 印章:共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率

      [蓝桥杯python] 印章 问题描述 1.资源限制 2.输入格式 3.输出格式 4.样式输入及输出 5.代码及解析 大功告成!编写不易,大家成功后点个关注or赞谢谢~~ 问题描述 共有n种图案的 ...

  2. Python 蓝桥杯试题 基础练习 特殊回文数

    Python 蓝桥杯试题 基础练习 特殊回文数 问题描述: 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于 ...

  3. Python 蓝桥杯试题 基础练习 数列排序

    Python 蓝桥杯试题 基础练习 数列排序 题目描述: 问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n ...

  4. 4.python蓝桥杯模拟题 一个包含有2019个结点的有向图,最多包含多少条边?(不允许有重边)

    4.python蓝桥杯模拟题 一个包含有2019个结点的有向图,最多包含多少条边?(不允许有重边) 1.用n表示图中顶点的数目,e表示边或者弧的数目,则对于无向图来说,e的取值范围为0-(1/2)n( ...

  5. python 蓝桥杯习题集(部分)

    python 蓝桥杯习题集(部分) python 十进制转十六进制(蓝桥杯) python 十六进制转十进制(蓝桥杯) python 区间k大数查询(蓝桥杯) python 最大最小公倍数(蓝桥杯) ...

  6. Python 蓝桥杯 动态规划 2道例题+配套1道历年真题

    距离蓝桥杯64天  快和小郑一起准备蓝桥杯吧 蓝桥杯真题题目链接:数字三角形 Leedcode青蛙跳台阶         Leedcode不同路径 特此鸣谢这位作者的点播,小郑从中获益不少文章来源ht ...

  7. Python 蓝桥杯试题 基础练习 十六进制转八进制

    Python 蓝桥杯试题 基础练习 十六进制转八进制 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行, ...

  8. python蓝桥杯真题 跑步锻炼

    python蓝桥杯真题 跑步锻炼 题目描述 小蓝每天都锻炼身体. 正常情况下,小蓝每天跑1千米.如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米.如果同时是周一或月初,小蓝也是跑2千米. ...

  9. Python 蓝桥杯试题 基础练习 字母图形

    Python 蓝桥杯试题 基础练习 字母图形 问题描述: 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个 ...

最新文章

  1. Acwing799. 最长连续不重复子序列[C++题解]:双指针算法O(n)
  2. 前端性能优化:当页面渲染遇上边缘计算
  3. 获取 input 单选框和多选框的值
  4. 洛谷 - P4012 深海机器人问题(最大费用最大流)
  5. 与TCP/IP协议的初次见面(一)
  6. 将游戏成绩传到排名页面html,用野狗开发实时游戏排行榜
  7. php并行下载文件,php – 限制并行/同时下载 – 如何知道下载是否被取消?
  8. 网站源代码遭公开,2.43亿名巴西公民个人数据遭泄露
  9. Ugly Windows
  10. 【Azure Services Platform Step by Step-第7篇】别把Windows Azure当虚拟主机使——理解Windows Azure服务架构...
  11. linux内核源码目录结构
  12. 【MOOC】华中科技大学计算机组成原理慕课答案-第二章-数据表示
  13. 如何在Excel中少犯二(I)
  14. 法线贴图及其用法详解
  15. python作业——输入一个月份单词输出对应月份缩写
  16. android手机通过USB共享电脑网络
  17. 深度学习教程(15) | 自然语言处理与词嵌入(吴恩达·完整版)
  18. 关于F# 6的那些新功能?你了解吗?
  19. python爬虫找漫画出现断章?那你就得看这篇爬虫思想教学咯!
  20. antd table修改没有数据时的显示

热门文章

  1. 计算机考证需要多少钱
  2. EXCEL如何真正彻底去掉小数点后的数字
  3. uni-app H5实现扫码登录功能
  4. keep-alive 理解 如何实现?缓存是什么?
  5. 记一次npm install 报RequestError: connect ETIMEDOUT 20.205.243.166:443和RequestError: socket hang up
  6. 劳务派遣经营许可证怎样办理
  7. docker容器化部署
  8. 时光荏苒,岁月静好-----2013年终总结
  9. 新学期可以制定目标计划并提醒的便签软件是哪款?
  10. logiscope系列-使用说明书