【CodeForces】698 C. LRU
【题目】C. LRU
【题意】给定空间为k的背包和n个物品,每次每个物品有pi的概率加入(Σpi=1),加入时若发现背包中已有该物品则不改变,若背包满k个物品后再加入新物品则弹出最早加入的物品,求加入10^100次后每个物品在背包中的概率。n,k<=20
【算法】概率DP
【题解】进行10^100次加入后背包一定是满的且是最后加入的k个物品,所以问题转化为在空背包中加入物品至满,各个物品在背包中的概率。
设$f_S$表示背包中的物品状态为S的概率,最后只需要统计所有恰好k个1的状态对物品的贡献即可。
根据全概率公式,P(A)=ΣP(Bi)*P(A|Bi),有:
f[S]=Σf[S-2^(j-1)]*p[j]+f[S]*Σp[j],S&2^(j-1)=1
移项得f[S]=Σf[S-2^(j-1)]*p[j]/sum(S),其中sum(S)是状态S中为0的物品的概率之和。
注意,当状态S为答案状态(k)时,统计不应该除以sum(S),因为已满之后就不填了。
★特别注意,当物品中不满k件概率不为0时,背包容量应降为概率不为0的物品件数。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=,maxN=;
int n,k;
double p[maxn],f[maxN],ans[maxn];
int main(){
scanf("%d%d",&n,&k);
int cnt=n;
for(int i=;i<=n;i++)scanf("%lf",&p[i]),cnt-=p[i]<1e-?:;
k=min(cnt,k);//
f[]=;
for(int S=;S<(<<n);S++){
f[S]=;
int num=;double sum=;
for(int i=;i<n;i++)if(S&(<<i))num++;else sum+=p[i+];
if(num>k)continue;
for(int i=;i<n;i++)if(S&(<<i)){
f[S]+=f[S-(<<i)]*p[i+];
}
if(num==k){
for(int i=;i<n;i++)if(S&(<<i))ans[i+]+=f[S];
}
f[S]/=sum;//
}
for(int i=;i<=n;i++)printf("%.10lf ",ans[i]);
return ;
}
【CodeForces】698 C. LRU的更多相关文章
- 【Codeforces】Round #491 (Div. 2) 总结
[Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- 【CodeForces】601 D. Acyclic Organic Compounds
[题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...
- 【Codeforces】849D. Rooter's Song
[算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...
- 【CodeForces】983 E. NN country 树上倍增+二维数点
[题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...
- 【CodeForces】925 C.Big Secret 异或
[题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...
- 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块
[题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫 ...
- 【CodeForces】906 D. Power Tower 扩展欧拉定理
[题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [ ...
- 【CodeForces】741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
[题意]给定n个点的树,每条边有一个小写字母a~v,求每棵子树内的最长回文路径,回文路径定义为路径上所有字母存在一种排列为回文串.n<=5*10^5. [算法]dsu on tree [题解]这 ...
随机推荐
- java的reflection
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性.例如,使用它能获得 Java 类中 ...
- 如何通过JAVA让DB2调用操作系统命令
引言:我们在工作中常用操作系统命令和DB2命令对数据库做数据的导入.导出等操作,但是DB2不支持复合SQL 语句调用操作系统命令,因此我们需要利用 UDF 来执行SQL 中不可用的操作(例如:执行一些 ...
- 新手必备!11个强大的 Visual Studio 调试技巧
简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...
- 选项卡控件(TabControl)的操作
移除选项卡和删除不同:前者可以从控件中移除不需要的选项,后者可以删掉整个控件.
- 20个PHP程序性能优化的方法
1.数据库连接当使用完毕时应当关闭,不要使用长连接. 2.用@屏蔽错误消息的做法非常低效,极其低效. 3.使用选择分支语句(switch case)好于使用多个if,else if. 4.$row[' ...
- bootstrap-datapicker 时间约束
<div class="input-group date date-picker" id="StartTime"> <input type=& ...
- [Code Festival 2017 qual A] B: flip
题意 给出一个n行m列初始全白的矩阵,每次可以翻转一行/一列的全部格子的颜色.问任意次操作后能否使得恰好有k个黑色格子. n,m<=1000 分析 显然要么翻转一次要么不翻转. 最终黑色格子数只 ...
- 【bzoj2600】[Ioi2011]ricehub 双指针法
题目描述 给出数轴上坐标从小到大的 $R$ 个点,坐标范围在 $1\sim L$ 之间.选出一段连续的点,满足:存在一个点,使得所有选出的点到其距离和不超过 $B$ .求最多能够选出多少点. $R\l ...
- day 03 字符串 for 循环
1.有变量量name = "aleX leNb" 完成如下操作: 1)移除 name 变量量对应的值两边的空格,并输出处理理结果 name = "aleX leNb&qu ...
- 【JavaScript】20款漂亮的css字体
样式一: body { margin: 0; padding: 0; line-height: 1.5em; font-family: "Times New Roman", Tim ...