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

【POJ】2096 Collecting Bugs

http://poj.org/problem?id=2096

题意:s个系统n种bug,每天找出一个bug,种类的概率是1/n,系统的概率是1/s。问:每个系统至少找出一个bug;每种类的bug都被找出。的期望天数(0<n, s<=1000)

#include <cstdio>
using namespace std;
double d[1005][1005];
int n, s;
double D;
int main() {
	scanf("%d%d", &n, &s);
	d[s][n]=0;
	D=s*n;
	for(int i=s; i>=0; --i) for(int j=n; j>=0; --j) if(!(i==s&&j==n))
		d[i][j]=((d[i+1][j]*(s-i)*j+d[i][j+1]*i*(n-j)+d[i+1][j+1]*(s-i)*(n-j))/D+1)/(1-i*j/D);
	printf("%.4f\n", d[0][0]);
	return 0;
}

  

设$d(i, j)$表示已经找到了$i$个系统的bug,$j$种bug还需要的期望天数,显然答案是$d(0, 0)$

考虑转移:由于$d(i, j)$可以转移到5种子集,且互斥,转移如下:

  1. 权为1,概率为1。(表示今天找到的bug)
  2. 权为$d(i, j)$,概率为$i*j/s/n$。(表示由找到了一个旧系统且是旧种类的bug的状态转移过来)
  3. 权为$d(i+1, j)$,概率为$(s-i)*j/s/n$。(表示由找到了一个新系统但是是旧种类的bug的状态转移过来)
  4. 权为$d(i, j+1)$,概率为$i*(n-j)/s/n$。(表示由找到了一个旧系统但是是新种类的bug的状态转移过来)
  5. 权为$d(i+1, j+1)$,概率为$(s-i)*(n-j)/s/n$。(表示由找到了一个新系统且新种类的bug的状态转移过来)

发现是不是和一般的dp不同了呢?转移中有自己!哈哈,这就是期望dp的精髓所在= =

那么我们可以移项了= =(这样就不会无限递归,体现了数学的奥秘= =)最后得到:

$$d(i, j) = (ijd(i, j)+(s-i)jd(i-1, j)+i(n-j)d(i, j-1)+(s-i)(n-j)d(i-1, j-1)+1)/(n*s)/(1-ij/(n*s))$$

可能你会说,为什么要设“还需要的期望天数”而不是“转移到当前状态的期望天数”呢?因为在自己对自己的转移中,假设那样设状态的话,答案显然是$d(s, n)$对吧,可是你会发现转移方程除数变成0了!因此状态转移不过来...

而前者由于初始状态显然是$d(s, n)=0$,就不会出现除数为0也就是求极限的步骤啦= =,因此可以这样搞下去啦= =。(其实上边的状态不是不可做,可以无限递归,其实就是极限= =,换一种方式设状态就是避免了陷入求极限)

 

相关文章:

  • 【Linux】linux经常使用基本命令
  • [JAVA设计模式]第二部分:创建模式
  • nyoj86-找球号(一) 【set 二分查找 hash】
  • 关于数组集合之间的转换
  • Android Bitmap和Canvas学习笔记
  • 12 redis之aof日志持久化
  • Intersection of Two Linked Lists(链表)
  • FastDfs 文件系统迁移
  • js实现页面重定向
  • 纪念逝去的岁月——C/C++字符串反转
  • 【SICP练习】92 练习2.65
  • 第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器
  • mysql全文索引____ft_min_word_len
  • 浅谈Servlet
  • [推荐]DDOS攻击与防范知识介绍
  • 10个确保微服务与容器安全的最佳实践
  • 2018一半小结一波
  • Date型的使用
  • emacs初体验
  • Facebook AccountKit 接入的坑点
  • gulp 教程
  • Javascript Math对象和Date对象常用方法详解
  • Java多态
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js正则,这点儿就够用了
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis中的lru算法实现
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Spring Cloud中负载均衡器概览
  • 好的网址,关于.net 4.0 ,vs 2010
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 用quicker-worker.js轻松跑一个大数据遍历
  • postgresql行列转换函数
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #etcd#安装时出错
  • (9)目标检测_SSD的原理
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ***原理与防范
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .Net各种迷惑命名解释
  • .php文件都打不开,打不开php文件怎么办
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [.net]官方水晶报表的使用以演示下载
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AAuto]给百宝箱增加娱乐功能
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [BZOJ2208][Jsoi2010]连通数
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [CareerCup] 14.5 Object Reflection 对象反射