试题 算法训练 印章

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

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

输入格式

一行两个正整数n和m

输出格式

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

样例输入

2 3

样例输出

0.7500

数据规模和约定

1≤n,m≤20

题解

思路

刚刚看到题目的时候,一开始以为是用高中学的概率论,组合数来做,但是后来发现自己实在是想不到,太复杂了,而且概率论也很久没学了,那么没办法了,只能是用动态规划来解决了

动态规划主要分为两步

第一步:确定初始状态

首先,我们知道,如果挑出一张牌,想要只抽中一种牌的概率肯定为1,接着,我们往下继续分析

我们现在思考一下,如果挑出i张牌,最后只抽中1种牌的概率是多少?

第一次肯定是1,第二次还是得抽中这张牌,那么概率就是 1 n \frac{1}{n} n1​,第三次还是这张牌,概率为 ( 1 n ) 2 (\frac{1}{n})^2 (n1​)2,推算下来,我们想要i张牌全部抽中1种牌的概率就是 ( 1 n ) i − 1 (\frac{1}{n})^{i-1} (n1​)i−1

至此,初始状态已经确定了

特殊的,当 i < j i<j i<j时,想要从使 i i i张牌中有 j j j种牌,一定是不存在的,则概率为0

第二步:推算动态转移方程

这题动态转移方程有点难推理,但是也不是不能推理

当前我们要抽i张牌,并且要保证这i张牌中正好有j种牌,现在我们要对抽 i − 1 i-1 i−1张牌的状态进行分析

  1. 假设我们在抽第 i − 1 i-1 i−1张牌的时候,已经有j种牌了,那么此时,我们在抽第 i i i张牌时还要保证这i张牌正好有j种牌,那么我们这时候不得不抽中这j种牌中任何一张,所以概率是 d p [ i − 1 ] [ j ] ∗ j n dp[i-1][j]*\frac{j}{n} dp[i−1][j]∗nj​
  2. 假设我们在抽第 i − 1 i-1 i−1张牌是,手上只有 j − 1 j-1 j−1种牌,那么此时,我们要保证这 i i i张牌中正好有j种牌,我们只能从这 j − 1 j-1 j−1种牌外再抽出一张,概率为 d p [ i − 1 ] [ j − 1 ] ∗ n − j + 1 n dp[i-1][j-1] * \frac{n-j+1}{n} dp[i−1][j−1]∗nn−j+1​

最后我们可以得出动态转移方程:
d p [ i ] [ j ] = d p [ i − 1 ] [ j ] ∗ j n + d p [ i − 1 ] [ j − 1 ] ∗ n − j + 1 n dp[i][j] = dp[i-1][j]*\frac{j}{n}+dp[i-1][j-1]*\frac{n-j+1}{n} dp[i][j]=dp[i−1][j]∗nj​+dp[i−1][j−1]∗nn−j+1​
至此,此题已经分析完毕,剩下按照基本方法推就行了

java代码

import java.util.Scanner;/*** @author 王宇哲*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();//第一维界表示的是买彩票的张数,第二维界表示要凑齐的张数double[][] dp = new double[m+1][n+1];//买一张只凑齐1种的概率一定为1dp[1][1] = 1;//初始化for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(i<j){dp[i][j] = 0;}//买i张(只)凑齐1张的概率if(j == 1 && i != 1){dp[i][j] = Math.pow(1.0/n,i-1);}}}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){//防止重复赋值if(!(j == 1 && i != 1) && !(i==1 && j==1)){//前面j种已经凑齐了,又抽到了前面j中dp[i][j] += dp[i-1][j]*((double) j/n);//前面i张已经凑齐了j-1中,这次抽到其他的牌的概率dp[i][j] += dp[i-1][j-1] * ((n-j+1.0)/n);}}}System.out.printf("%.4f",dp[m][n]);}
}

蓝桥杯-算法训练 印章相关推荐

  1. 蓝桥杯 算法训练 印章

    蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...

  2. 蓝桥杯算法训练 印章

    蓝桥杯 算法训练 印章 问题描述 ​ 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 ​ 一行两个正整数n和m 输出格式 ​ 一个实数P表示答案,保 ...

  3. 蓝桥杯算法训练-印章

    这一题是10月份新加的题,网上也没啥答案,标签为dp动态规划,实际上我觉得不用动态规划也能做,毕竟python是自带了求组合数的函数,下面来看一下吧. 试题 算法训练 印章 资源限制 时间限制:1.0 ...

  4. C语言-蓝桥杯-算法训练 印章

    问题描述 共有 n 种图案的印章,每种图案的出现概率相同.小A买了 m 张印章,求小A集齐 n 种印章的概率. 输入格式 一行两个正整数n和m. 输出格式 一个实数P表示答案,保留4位小数. 样例输入 ...

  5. 蓝桥杯算法训练 印章 C语言实现

    资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 一行两个正整数n和m 输出格式 一 ...

  6. 蓝桥杯 算法训练 幸运的店家

    蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...

  7. 蓝桥杯 算法训练 Beaver's Calculator

    蓝桥杯 算法训练 Beaver's Calculator 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator ...

  8. 蓝桥杯算法训练-24点(Python)

    问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  9. 蓝桥杯——算法训练——数字三角形

    蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...

最新文章

  1. 巴曙松:收到了Roger送的BCH,已全捐给慈善基金
  2. Eclipse Tomcat的一些基本配置
  3. 引入 ServletContextListener @Autowired null 解决办法
  4. mybatis-plus与jpa在操作数据库时写法对比
  5. /etc/fstab文件出错,无法进入Linux系统
  6. javascript HTMLElement
  7. [面试]排列组合与概率计算(一)
  8. [Android]EditText属性详解
  9. 输入url后的加载过程
  10. markdown的基本使用方法
  11. Android Studio 工具栏添加图标
  12. [转帖] “王者对战”之 MySQL 8 vs PostgreSQL 10
  13. 纯前端大数据处理技术:葡萄城纯前端开发工具应用实践
  14. 【HTML CSS】笔记初日 HTML基础
  15. NIST宣布推出前4种抗量子加密算法
  16. libfuse install error: fusermount.c:295:44: error: ‘CLONE_NEWNS’ undeclared (first use in this funct
  17. win10系统下载地址
  18. html中select和choose的区别
  19. 小米正式与联芯科技合作开发手机芯片
  20. 2017年双十一最全面的大数据分析报告在此!

热门文章

  1. 原来这就是 UI 设计师的门槛
  2. 智能运维 | 六度亮剑SREcon,百度引领智能运维新风向
  3. 伟大的程序员同志们累了看看我这笑话,巨搞笑!
  4. 高洛峰2015年新版视频发布
  5. 苹果胜三星震惊国产手机
  6. UI设计从业者,怎样才能成为月薪过万的UI设计师?
  7. 瑞吉外卖项目——瑞吉外卖
  8. 这样的萌妹,谁不爱呢?
  9. excel内容少却文件很大_(excel内容很少,文件却很大,怎么解决)excel表格数据少但是过大怎么办...
  10. 【问题解决】Springboot项目启动日志不显示端口号,而且日志也很少!