[jzoj]3468. 【NOIP2013模拟联考7】OSU!(osu) (期望DP)
来源:互联网 发布:ecshop 2.7.3 php版本 编辑:程序博客网 时间:2024/05/18 20:36
Problem
给你一个序列,
在长度为
Data constraint
30%的数据 n<=20
60%的数据 n<=1000
100%的数据 n<=100000
Solution
20%
- 这一档部分分很好拿,直接暴力即可.
60%
他喵的我想了很久,还是想不出来,我一直纠结于如何把概率给它乘上去.
但当我再想久一点后,发现自己简直是个逗比,为什么不可以用乘法分配律呢?
于是,我的想法是:
设
f[i][j] 表示从第i 个节点开始,已经有j 个连续的1 了.再设
g[i][j] 表示其对应的概率.然后我们就可以通过下一个点选还是不选愉快地转移了.
#include <iostream>#include <cstdio>#include <cstring>#define Maxn 100010#define Mam 1010#define fo(i,a,b) for (i = a; i <= b; i++)using namespace std;int n,i,j;long double a[Maxn],b[Maxn],f[Mam][Mam],t[Mam][Mam];int main(){ freopen("osu.in","r",stdin); freopen("osu.out","w",stdout); scanf("%d",&n); fo(i,1,n) scanf("%Lf",&a[i]), b[i] = 1 - a[i]; b[i]=1; t[0][0] = 1; fo(i,0,n) { fo(j,0,i) { f[i+1][j+1] = (f[i+1][j+1] + f[i][j]) * a[i + 1]; t[i+1][j+1] = t[i+1][j+1] + t[i][j] * a[i + 1]; f[i+1][0] = f[i+1][0] + (j * j * j) * t[i][j] + f[i][j]; t[i+1][0] = t[i+1][0] + t[i][j] * b[i + 1]; } f[i+1][0] = f[i+1][0] * b[i + 1]; } printf("%0.1Lf",f[n+1][0]);}
100%
观察上述方法,其瓶颈在于
j ,因为我们要求一个个数次方,所以必须知道有多少个数.但如果,我们能不需要知道其个数,直接从
i⇒i+1 ,那么我们就可以O(n) 啦i⇒i+1 ,其实我们只需要把立方给拆一下zz都知道
(i+1)3=i3+3i2+3i+1 ,所以我们记录f[i][1/2/3] 分别表示以1∼3 为次方的答案.注意
f[i][1/2] 转移是必须选i+1 的,而f[i][3] 可以选或不选.有点难理解.
#include <iostream>#include <cstdio>#include <cstring>#define Maxn 100010#define fo(i,a,b) for (i = a; i <= b; i++)using namespace std;int n,i;long double a[Maxn],b[Maxn],f[Maxn][4];int main(){ freopen("osu.in","r",stdin); freopen("osu.out","w",stdout); scanf("%d",&n); fo(i,1,n) scanf("%Lf",&a[i]), b[i] = 1 - a[i]; b[i] = 1; fo(i,0,n) { f[i+1][3] = (f[i][3] + 3 * f[i][2] + 3 * f[i][1] + 1) * a[i + 1]; f[i+1][3] += (f[i][3] * b[i + 1]); f[i+1][2] = (f[i][2] + 2 * f[i][1] + 1) * a[i + 1]; f[i+1][1] = (f[i][1] + 1) * a[i + 1]; } printf("%0.1Lf",f[n+1][3]);}
阅读全文
0 0
- [jzoj]3468. 【NOIP2013模拟联考7】OSU!(osu) (期望DP)
- JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)
- 【NOIP2013模拟联考7】OSU
- [BZOJ4318]OSU!(期望dp)
- bzoj4318.osu!(期望DP)
- 【BZOJ4318】OSU!【期望DP】
- 【bzoj4318】OSU! 期望DP
- [bzoj4318]OSU! 期望dp
- 【bzoj4318】OSU! 期望dp
- BZOJ 4318 OSU! 期望DP
- BZOJ 4318 OSU!(期望DP )
- bzoj 4318 OSU! 期望dp
- bzoj 4318: OSU! 期望dp
- BZOJ 4318 OSU!期望DP
- BZOJ 4318: OSU! 期望dp
- bzoj4318 OSU!(期望概率DP,期望的线性性)
- [Codeforces235B]Let's Play Osu!(期望dp)
- bzoj 4318: OSU! (概率与期望DP)
- Hbase_应用
- 1、饼图展示
- 工作日志:添加第三方源码到项目中
- 伪类在ios移动端浏览器内无效的解决方法
- 污水雨管理Bentley.SewerGEMS.CONNECT.Edition.Update1.v10.01.00.70.build.30102017
- [jzoj]3468. 【NOIP2013模拟联考7】OSU!(osu) (期望DP)
- android studio更新到最新的版本后项目遇到的问题
- String类的零碎知识点
- 香蕉派M1搭建vnc服务
- subprocess监控子进程的脚本执行
- MariaDB yum 配置,j简单,方便,快捷
- 实验2 编译使用U-BOOT
- Entity Framework Core 2.0表自定义映射
- 习题7.4