POJ 2096 Collecting Bugs
2016-05-19 16:28
302 查看
题目链接:http://poj.org/problem?id=2096
题意:一个bug属于一个分类和一个子系统,现在有n个分类和s个子系统,然后一天可以发现一个bug,这个bug等概论属于一种分类和一种子系统。问发现多有类别的bug和所有类别的子系统的期望天数。
思路:概率dp,dp[i][j]表示已经发现了i个分类和j个子系统,达到目标的期望天数。求期望用倒推,dp
[s] = 0,dp[i][j] = (i*j)/(n*s)*dp[i][j] + (n-i)*j/(n*s)*dp[i+1][j] (发现一种新的类别) + i*(s-j)/(n*s)*dp[i][j+1] + (n-i)*(s-j)/(n*s)*dp[i+1][j+1] + 1 (既发现新类别,又发现新系统).对这个式子进行化简,然后递推,dp[0][0]即是答案。
题意:一个bug属于一个分类和一个子系统,现在有n个分类和s个子系统,然后一天可以发现一个bug,这个bug等概论属于一种分类和一种子系统。问发现多有类别的bug和所有类别的子系统的期望天数。
思路:概率dp,dp[i][j]表示已经发现了i个分类和j个子系统,达到目标的期望天数。求期望用倒推,dp
[s] = 0,dp[i][j] = (i*j)/(n*s)*dp[i][j] + (n-i)*j/(n*s)*dp[i+1][j] (发现一种新的类别) + i*(s-j)/(n*s)*dp[i][j+1] + (n-i)*(s-j)/(n*s)*dp[i+1][j+1] + 1 (既发现新类别,又发现新系统).对这个式子进行化简,然后递推,dp[0][0]即是答案。
#include <cstdio> #include <iostream> #include <cstring> using namespace std; #define Clean(x,y) memset(x,y,sizeof(x)) #define rep(i,j,k) for(int i = j; i <=k; i++) #define Rrep(i,j,k) for(int i = j; i >=k; i--) const int maxn = 1002; int n,s; double dp[maxn][maxn]; int main() { scanf("%d%d",&n,&s); dp[n+1][s] = dp [s+1] = dp [s] = 0; Rrep(i,n,0) Rrep(j,s,0) { if ( i == n && j == s ) continue; dp[i][j] = ( (n-i)*(s-j)*dp[i+1][j+1] + (n-i)*j*dp[i+1][j] + i*(s-j)*dp[i][j+1] + n*s )/(n*s-i*j) ; } printf("%0.7f\n",dp[0][0]); return 0; }
相关文章推荐
- JAVA jdk 线程池学习笔记
- win下部署solr4.7.2
- Leetcode 326 Power of Three
- U盘中毒文件都不见了
- linux查看磁盘是否SSD盘
- 利用log4j显示hibernate打印sql中的参数
- G-CNN: an Iterative Grid Based Object Detector
- UICollectionView使用方法
- Android 添加系统服务
- linux内核启动第一阶段分析
- view发光阴影效果
- Javascript 严格模式“use strict” 详解
- tupian
- Subsets II
- 自定义异常简单实例
- es部署在docker里面,让es固定在一台slave上跑
- linux 权限
- Unity对象的所有组件深拷贝与粘贴
- 团队作业2
- 独立博客收藏