题解: CF768D Jon and Orbs
题解:CF768D Jon and Orbs
一句话题面:有k种不同的物品,每天等概率任取一种(不一定是新的种类)。q组询问,每组给出一个p,问取完这k件物品的概率不小于\(\frac{p}{2000}\)的最小天数
不用说,肯定是概率DP了
1.定义 :\(f_{i,j}\) 表示前\(i\)天选取了 \(j\) 种物品的概率(\(P.S.\)该定义不是最终的准确定义!请耐心往下读!)
则分两类情况转换:
(1)前\(i-1\)天已经选了\(j\)种物品了,第\(i\)天选了一个旧的,则有
\]
(2)前\(i-1\)天选了\(j-1\)种物品,第\(i\)天选了一个新的,则有
\]
整合一下两种情况,则有
\]
2.初始值:(\(P.S.\)因为初始值的问题我调了2个多小时!!!大家一定要想清楚再下笔!)
一开始我是这么写的:
F(i,1,M) f[i][1]=1;
一看别人的题解发现是这样的:
f[0][0]=1;
当场感觉不妙,再仔细想了想有道理:前\(0\)天选\(0\)种的概率肯定就是\(1\)啊,那前\(i\)天不是至少会选到一种吗,概率为什么不是1???
回到定义去找问题:发现“选了\(j\)种物品”其实不够准确,前\(i\)天选了1种物品,是每一天只需要随便选一种就行了吗?
再三思索后终于发现并不是这样的!物品种类不能多也不能少,必须刚好是\(1\)种!!!,所以将定义说清楚了应该是: 前\(i\)天只选了 \(j\) 种物品的概率
所以得到如下边界:
\]
然后恍然大悟别人写的是对的,令\(f_{0,0}=1\),然后用上面推出的动态转移方程推得出\(f_{1,1}=\frac{1}{k}\)
所以也可以把我丑的一批的初始化改成这样
f[1][1]=1; F(i,2,M) f[1][i]=f[1][i-1]/k;
\(Code:\)
#include<bits/stdc++.h>
#define ld long double
#define ri register int
#define F(i,l,r) for(ri i=l;i<=r;++i)
using namespace std;
const int N=1005,M=1e4;
ld tmp,f[M+5][N],p;//f[i][j]:前i天只取了j种物品的概率
int k,q,w;
int main(){;
scanf("%d%d",&k,&q);
f[0][0]=1;//f[1][1]=1; F(i,2,M) f[1][i]=f[1][i-1]/k;
F(j,1,k) F(i,1,M) f[i][j]=(f[i-1][j]*(ld)j/k+f[i-1][j-1]*(ld)(k-j+1)/k);
while(q--){
scanf("%Lf",&p); p*=0.0005; w=1;//注意p的类型不能是int,因为要乘0.0005
while(f[w][k]<p) ++w;
//暴力搜就可以没必要二分查,总时间复杂度不超过M*Q,才1e7(注:M的范围是算出来的,当k=1000,p=1000时,w最大也才7000多一点点)
printf("%d\n",w);
}
return 0;
}
3.总结:方程并不难推,关键是想清楚初始化!!!
END~
题解: CF768D Jon and Orbs的更多相关文章
- Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) D. Jon and Orbs
地址:http://codeforces.com/contest/768/problem/D 题目: D. Jon and Orbs time limit per test 2 seconds mem ...
- 【codeforces 768D】Jon and Orbs
[题目链接]:http://codeforces.com/contest/768/problem/D [题意] 你有一个水晶; 它每天都会产生一个球??(球有k种) 然后每种球产生的可能性是相同的-& ...
- codeforces 768 D. Jon and Orbs(概率dp)
题目链接:http://codeforces.com/contest/768/problem/D 题意:一共有k种球,要得到k种不同的球至少一个,q个提问每次提问给出一个数pi,问概率大小大于等于pi ...
- codeforces 768D Jon and Orbs
题目链接:http://codeforces.com/problemset/problem/768/D 令$f[i][j]$表示当前产生过了$i$个球,产生过了$j$个不同的球的概率. ${Ans_i ...
- 【概率dp】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) D. Jon and Orbs
直接暴力dp就行……f(i,j)表示前i天集齐j种类的可能性.不超过10000天就能满足要求. #include<cstdio> using namespace std; #define ...
- Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined)
C题卡了好久,A掉C题之后看到自己已经排在好后面说实话有点绝望,最后又过了两题,总算稳住了. AC:ABCDE Rank:191 Rating:2156+37->2193 A.Oath of t ...
- Codeforces_768_D_(概率dp)
D. Jon and Orbs time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 动态规划之经典数学期望和概率DP
起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
随机推荐
- manim边学边做--圆弧形
圆弧形可以算是一种特殊的圆形,它是圆形的一部分.manim中,单独为圆弧形状封装了几个模块: Arc:通用的圆弧,根据半径和角度来绘制圆弧 ArcBetweenPoints:根据两个点和角度来绘制圆弧 ...
- Python 潮流周刊#66:Python 的预处理器(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- React挂载dom无效的问题
话不多说,先上代码. 根据我的猜测,ReactDOM.render()这个函数,也就是挂载的意思是将内容进行替换,所以我的vdom1在调试的时候没有展示出来. 然后我创建了两个div块,分别挂载vdo ...
- Java异常详解(全文干货)
介绍 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示发生了异常 ...
- linux 前端部署 tomcat 脚本
前提: 打包后的文件位置:/home/usr/back 目的部署位置:/home/usr/prod1 目的部署位置:/home/usr/prod2 在linux 服务器上 新增文件deploy-web ...
- 【YashanDB知识库】YashanDB的JDBC/OCI驱动如何设置字符编码
问题现象 Oracle.Mysql数据库链接串,JDBC驱动连接串可以指定客户端的编码格式: jdbc:mysql://hostname:port/database_name?useUnicode=t ...
- Mongodb入门3
company数据库下面heros集合里的数据: { "_id" : ObjectId("6100c897d0c9f4158c2b0c9b"), "n ...
- CSS – border-radius (Rounded Corners)
前言 之前的文章 CSS – W3Schools 学习笔记 (3), 这篇独立出来写, 作为整理. 参考: Youtube – Advanced CSS Border-Radius Tutorial ...
- java基础 -IO流笔记
610,文件的基础知识 文件流 输入流和输出流都是相对 java程序内存 而言 611,创建文件 在D盘下创建文件. package com.hspedu.file; import org.junit ...
- JavaScript习题之判断题
1. JavaScript是Java语言的脚本形式.( ) 2. JavaScript中的方法名不区分大小写.( ) 3. JavaScript语句结束时的分号可以省略.( ) 4. 通过外链式引入J ...