问题一:蓝桥杯(印章)

1. 问题描述   

共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。

2. 输入格式   

一行两个正整数n和m

3. 输出格式   

一个实数P表示答案,保留4位小数。

4. 问题解释

这个问题是一个经典的概率问题,即“收集券问题”,也被称为“餐巾纸问题”。问题的核心在于求解收集到全部不同类型券(在本例中为印章)的概率。这里采用动态规划(Dynamic Programming, DP)解决,因为该问题满足动态规划的两大特性:最优子结构和重叠子问题。

5. 动态规划分析

动态规划表 dp 用于存储中间结果,其中 dp[i][j] 表示购买了 i 张印章时,集齐了 j 种不同印章的概率。

为什么使用动态规划

  1. 最优子结构:每购买一张新印章时,集齐某种数量印章的概率依赖于之前购买的印章。例如,集齐3种印章的概率可以基于集齐2种或3种印章的概率计算得出。

  2. 重叠子问题:在计算集齐不同数量印章的概率时,会重复考虑某些情况,如购买了4张印章集齐2种印章的概率会在计算集齐更多种类印章的概率时再次用到。

状态转移方程

  • j == 1时,dp[i][j] = (1/n) ** (i-1) 表示购买 i 张印章且全部是同一种的概率。
  • 否则,dp[i][j] 可以从两种情况转移而来:
    • 继续保持j种不同印章:购买的新印章是已有的j种之一的概率为 j/n,因此概率为 dp[i-1][j] * (j/n)
    • j-1种变为j:购买的新印章是缺失的n-j+1种之一的概率为 (n-j+1)/n,因此概率为 dp[i-1][j-1] * ((n-j+1)/n)

边界条件

  • dp[i][0] = 0(不可能购买印章而一种都不集齐)。
  • dp[0][j] = 0(不购买印章时不可能集齐任何印章)。

6. 实现代码(python)

if __name__ == '__main__':
    n, m = map(int, input().split()) 
    dp = [[0] * (n+1) for _ in range(m+1)]
    for i in range(1, m + 1):
        for j in range(1, n + 1):  
            if j == 1:
                dp[i][j] = (1/n) ** (i-1)
            else:
                dp[i][j] = dp[i-1][j]*(j/n) + dp[i-1][j-1]*((n-j+1)/n)  
    print(f"{dp[m][n]:.4f}")
 

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要制作一个椭圆印章,可以使用如下步骤: 1. 使用图形软件(如Adobe Illustrator)绘制一个椭圆形状,并在其中添加印章要显示的文本和图形。 2. 将椭圆形状导出为 PNG 或者 SVG 格式的图片,保证图片的分辨率足够高。 3. 使用 CSS 样式将导出的图片应用到 HTML 元素上,可以使用 background-image 属性来设置图片的背景,同时使用 background-size 属性调整图片大小以适应元素的大小。 4. 在 CSS 样式中,使用 border-radius 属性将元素的边角设为椭圆形,同时使用 box-shadow 属性添加阴影效果,使印章更加立体。 以下是一个示例代码,可以实现一个简单的椭圆印章: HTML 代码: ``` <div class="seal"> <p>椭圆印章</p> </div> ``` CSS 代码: ``` .seal { width: 200px; height: 100px; background-image: url('seal.png'); background-size: cover; border-radius: 50%; box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); display: flex; justify-content: center; align-items: center; font-size: 20px; font-weight: bold; color: #fff; text-shadow: 0 0 5px rgba(0, 0, 0, 0.3); } ``` 在上述代码中,我们使用了一个背景图片(seal.png),将元素的宽度和高度设为 200px 和 100px,同时将元素的边角设为 50%,使其呈现椭圆形状。使用 box-shadow 属性添加阴影效果,使印章更加立体。最后,使用 display、justify-content、align-items、font-size、font-weight、color 和 text-shadow 等属性来设置印章的样式和文本效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值