CF698C - LRU
这又是什么毒瘤.....

解:把操作序列倒着来,就是考虑前k个入队的元素了。显然这样每个元素的概率不变。
状压。设fs表示当前元素为s的概率。
每次转移的时候选择一个不在s中的元素,作为下一个加入的元素。注意实际上有可能选择到在s中的元素。
然后我们设选择到s中元素的概率为x。
我们可能第一次就选到i,也有可能第2次选到,第3次选到......
概率分别是pi,x * pi,x2 * pi,......
无限求和有pi / (1 - x)。
所以最后转移的时候就是fs * pi * / (1 - x)
记得判断有用元素不足k的时候直接输出。
#include <bits/stdc++.h> const int N = , M = ; double p[N], f[M], ans[N], P[M];
int n, k, wp[M], cnt[M]; inline void out(int x) {
for(int i = n - ; i >= ; i--) printf("%d", (x >> i) & );
puts("");
return;
} int main() {
int Cnt = ;
scanf("%d%d", &n, &k);
for(int i = ; i < n; i++) {
scanf("%lf", &p[i]);
if(p[i] > ) Cnt++;
}
if(Cnt < k) {
for(int i = ; i < n; i++) {
if(p[i] > ) printf("1 ");
else printf("0 ");
}
return ;
} int lm = ( << n);
for(int i = ; i < n; i++) wp[ << i] = i;
for(int i = ; i < lm; i++) {
cnt[i] = + cnt[i - (i & (-i))];
P[i] = P[i - (i & (-i))] + p[wp[i & (-i)]];
}
f[] = ;
for(int i = ; i < lm; i++) {
//out(i);
if(cnt[i] == k) {
for(int s = ; s < n; s++) {
if(i & ( << s)) {
ans[s] += f[i];
}
}
continue;
}
if(cnt[i] > k) continue;
for(int s = ; s < n; s++) {
if((i >> s) & ) continue;
f[i | ( << s)] += f[i] * p[s] / ( - P[i]);
}
} for(int i = ; i < n; i++) printf("%.8f ", ans[i]);
return ;
}
AC代码
CF698C - LRU的更多相关文章
- CF698C. LRU [容斥原理 概率]
CF698C. LRU 题意:n种物品,大小为k的队列,\(p_i\)的概率选择第i种物品放入队尾,如果已经有i了就不放了.队列大小>k时弹出队首.求\(10^{100}\)次操作后每种物品在队 ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- OS存储管理——FIFO,LRU,OPT命中率
课程设计课题 存储管理程序设计 摘 要 虚拟存储器作为现代操作系统中存储管理的一项重要技术,实现了内存扩充功能.而分页请求分页系统正好可以完美的支持虚拟存储器功能,它具有请求调页功能和页面置换功能.在 ...
- [LeetCode] LRU Cache 最近最少使用页面置换缓存器
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...
- 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)
在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...
- 页置换算法FIFO、LRU、OPT
页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...
- LRU LFU FIFO 转载
-------------------------------------->href--------------------------> http://blog.chinaunix.n ...
- 缓存淘汰算法--LRU算法
1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也 ...
- 【leetcode】LRU Cache
题目简述: Design and implement a data structure for Least Recently Used (LRU) cache. It should support t ...
随机推荐
- centos 6.5 查看时区和设置时区
centos6.x 和centos7.x在时区方面有点差距,本文是针对centos6.x进行介绍. 其实在我的一个博文里,在安装系统的时候就可以进行时区的设置,本文介绍的是用命令进行时区查看和设置. ...
- Linux基础学习笔记4-文本处理
本章内容 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看 文件查看命令:cat,tac,rev cat [OPTION] ...
- 设计模式笔记:开闭原则(OCP,The Open-Closed Principle)
1. 开闭原则概述 开闭原则(OCP,The Open-Closed Principle)两个主要特征: (1)对扩展开放(open for extension):模块的行为的可以扩展的,当应用的需求 ...
- Yii2的客户端验证
如何配置Yii的客户端验证呢? 首先,应该配置验证规则的场景,即scenario 其次,应该配置验证规则,在验证规则中配置客户端验证 例如:
- loadrunner -vuser
在每个负载生成器上,安装 remote agent dispatcher(process) 和 loadrunner agent 控制器指示remote agent dispatcher 在load ...
- 一、Dev
一.获取选中的表格 // MessageBox.Show(gridview_Parent.GetFocusedDataRow()["series"].ToString());//获 ...
- Lodop打印如何隐藏table某一列
Lodop打印超文本,既可以打印页面上存在的某些部分,也可以自己组织超文本和css样式传入,有些需要打印的页面表格里,会有一列有编辑删除等按钮,用于对于数据库数据的操作,在打印的时候,这一列由于不属于 ...
- 【NLP】Recurrent Neural Network and Language Models
0. Overview What is language models? A time series prediction problem. It assigns a probility to a s ...
- VM下安装Kali虚拟机
VM下Kali虚拟机安装 下载kali Linux系统镜像 下载地址:http://mirrors.hust.edu.cn/kali-images/ 网页如下: kali官网:http://www.k ...
- Dividing POJ - 1014 多重背包二进制优化
多重背包模型 写的时候漏了一个等号找了半天 i<<=1 !!!!!! #include<iostream> #include<cstdio> #include&l ...