概率题。。可以dp也可以推公式

抽象出来的题目大意:

有 n个小球,有放回的取m次  问 被取出来过的小球的个数的期望

dp维护两个状态 第 i 次取出的是 没有被取出来过的小球的 概率dp[i] 和取出的是已经被取出来过的小球的概率np[i];

如果第 i-1 次取出的是已经被取出来过的小球 那么第 i 次取出没有取出来过小球的概率即为 dp[i-1];

反之则为 dp[i-1] - 1/n(没有取出来过的小球少了一个)

所以可以得到状态转移方程 dp[i]=dp[i-1]*(dp[i-1]-1/n)+np[i-1]*dp[i-1];

还可以推公式。。不过我还是觉得 推公式 得靠人品,能yy出来那当然是极好的。。。

代码:

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<math.h>
#include<ctype.h>
using namespace std;
#define MAXN 10000
int n,m;
double dp[];
double np[];
double solve()
{
double res=;
memset(dp,,sizeof(dp));
memset(np,,sizeof(np));
dp[]=;
np[]=;
for(int i=;i<=m;i++)
{
dp[i]=dp[i-]*(dp[i-]-1.0/(double)n)+np[i-]*dp[i-];
np[i]=-dp[i];
}
for(int i=;i<=m;i++)
{
res+=dp[i];
}
return res;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%.10lf\n",solve());
}
return ;
}

公式。。

#include <stdio.h>
#include<math.h>
double n,m;
int main()
{
while(scanf("%lf%lf",&n,&m)!=EOF)
{
printf("%.10lf\n",n-n*pow(((n-)/n),m));
}
return ;
}

最新文章

  1. Top 15 不起眼却有大作用的 .NET功能集
  2. Allok Video to FLV Converter 可以用的 FixFlash.exe
  3. linux中使用软链接时出现 too many levels of symbolic links
  4. Maven基础知识和环境搭建
  5. PHP中MySql函数收集
  6. VS2013密匙
  7. JS-Date日期内置对象
  8. laravel 心得
  9. GDKOI 2016
  10. Apple Watch程序开发30分钟秒懂
  11. 通过ccb(CocosBuilder)文件生成cocos2dx代码
  12. FCKeditor文字编辑器
  13. 获取Java VM中当前运行的所有线程
  14. EXT 基础环境搭建
  15. 五、Html表单标签
  16. C++格式化输出浮点数
  17. xml和java对象互转:JAXB注解的使用详解
  18. virtualenv虚拟环境
  19. Centos7+python3.6+face-recognition
  20. js代码解析原则

热门文章

  1. ID3算法(决策树)
  2. 最牛逼的的shell命令
  3. Python模拟登录实战(二)
  4. sublime3 使用技巧
  5. 设置应用中出现NFC服务,去掉
  6. 苹果的HomeKit协议
  7. Vi操作技巧
  8. prototype vs __proto__ 之间关系
  9. 从前有个聊天室(socket&amp;threading)
  10. C#程序调用cmd执行命令-MySql备份还原