题解: 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 ...
随机推荐
- 树莓派高级开发——“IO口驱动代码的编写“ 包含总线地址、物理_虚拟地址、BCM2835芯片手册知识
微机总线地址 地址总线: 百度百科解释: 地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入) ...
- LeetCode300.最长递增子序列
LeetCode300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除 ...
- 廉价平替esphome水浸 雨水传感器diy
2024年7月27日 改进了手头的所有8266 都加了红外和dht11 干了一件非常抽象的事情 调试的时候给dht11 插到5v了 单薄的它好像要融化了 binary_sensor: # 水浸 雨水 ...
- 学习redis问题记录
2024年5月25日 倒腾了很长时间 突然发现的问题 ide提示改为toList() 我顺便就改过去了 但是实际业务中redis序列化会产生无法反序列化的问题 造成缓存挂壁 业务直接G collect ...
- Linux | Ubuntu 16.04.4 通过docker安装单机FastDFS
Ubuntu 16.04.4 通过docker安装单机fastdfs 前言 很久没有写技术播客了,这是一件很不应该的事情,做完了事情应该有沉淀的. 我先说一点前情提要,公司的fastdfs突然就挂了, ...
- 1055 - Expression #9 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx.xxx.xxx' which is not functionally ...;this is incompatible with sql_mode=only_full_group_by
MySQL 8 的默认 sql_mode 包含了only_full_group_by,如果想要sql不按照这模式做检查,可以设置当前session的sql_mode值不包含oly_full_group ...
- 在.NET后端开发的十年之旅:反思与总结
开局 依稀记得那是2014年11月大四上学期,学校已经没有课了.看着同寝室的其他室友都出去实习了,而我一个人还坐在电脑前发呆.因为的不敢出去面试. 由于小学时牙齿有一颗龅牙,从小就产生了 ...
- 高维前缀和 (SOSDP)
算法介绍--高维前缀和 引入 我们都知道二维前缀和有这么一个容斥的写法: for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ s[i][j]=s[i ...
- Go runtime 调度器精讲(六):非 main goroutine 运行
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go runtime 调度器精讲(三):main goroutine 创建 介绍了 main goroutine 的创建,文中我们说 mai ...
- llama.cpp推理流程和常用函数介绍
llama.cpp是一个高性能的CPU/GPU大语言模型推理框架,适用于消费级设备或边缘设备.开发者可以通过工具将各类开源大语言模型转换并量化成gguf格式的文件,然后通过llama.cpp实现本地推 ...