zoukankan      html  css  js  c++  java
  • Codeforces698C. LRU

    n<=20种东西,有个大小k<=n的箱子,每次会以固定的概率从所有东西里选一种,若箱子里有空位且这种东西没出现过就丢进去,若箱子满了且这种东西没出现过就把最早访问过的一个丢掉,(只要在每次操作最早的“挑一种物品”选中某个数都算“访问”)问10^100操作后每个数存在箱子里的概率。

    由于操作过多,最后箱子可以看成满的。可以发现由于操作跟时间有关,只有最后新进入箱子的k种东西在进入箱子时会对答案产生影响,因此只用看后面几次操作即可。可以把这个过程等同于:从头开始拿,问刚把箱子填满时的概率。

    在后面的操作中,虽然只看最后k种东西被访问的过程,但期间也有可能多次访问到同种东西,咋办呢?状压,f(i)表示状态i出现的概率,$f(i)=sum f(j)*a_{j关于i的补集}+sum_{kepsilon i} a_k*f(i)$,错误!最终状态不会再自己转移到自己,所以判一下i是不是终态即有没有k个数,没有才把后面那部分算上去。

    还错!数据中有一些是箱子不可能满,所以要把箱子大小和概率>0的种数取个min。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cstdio>
     5 //#include<bitset>
     6 #include<algorithm>
     7 #include<cmath>
     8 using namespace std;
     9 
    10 int n,K;
    11 #define maxn 1100011
    12 double a[33],ans[maxn],eve[33];
    13 int main()
    14 {
    15     scanf("%d%d",&n,&K);
    16     int cnt=n;
    17     for (int i=1;i<=n;i++) scanf("%lf",&a[i]),cnt-=a[i]<1e-10?1:0;
    18     K=min(cnt,K);
    19     ans[0]=1; for (int i=1;i<=n;i++) eve[i]=0;
    20     for (int i=1;i<(1<<n);i++)
    21     {
    22         int one=0; ans[i]=0; double kk=0;
    23         for (int j=1;j<=n;j++) if ((i>>(j-1))&1) one++,ans[i]+=ans[i^(1<<(j-1))]*a[j],kk+=a[j];
    24         if (one==K) for (int j=1;j<=n;j++) if ((i>>(j-1))&1) eve[j]+=ans[i];
    25         ans[i]/=(1-kk);
    26     }
    27     for (int i=1;i<=n;i++) printf("%.8lf ",eve[i]);
    28     return 0;
    29 }
    View Code

    这里有一种容斥做法。

    比如说我最后序列里存在第i种东西,且i是最后拿的,那么之前可以拿很多很多的东西,但只能拿另外的n-1种中的k-1种。比如说某k-1种的概率加起来是x,i的概率是a,那么这k-1种的状态对i的答案的贡献就是:a*P(这k-1种的状态)=a*(1+x+x^2+x^3+……)=a/(1-x),等比数列求和,简单。等会确定是这样?这里面包含了选k-2种,k-3种,……,0种的情况!!!那就挑掉k-2的,然后可能在k-2里面挑多了,那k-3再补回来……这个系数可以用组合数计算:(copy from liurunda)

  • 相关阅读:
    【BZOJ1010】【HNOI2008】玩具装箱
    【BZOJ1009】【HNOI2008】GT考试
    【BZOJ1008】【HNOI2008】越狱
    【BZOJ1007】【HNOI2008】水平可见直线
    【BZOJ1006】【HNOI2008】神奇的国度
    (考研)生产者消费者问题(赋代码)
    (考研)(精华)二叉树的知识结构图以及各种特殊的二叉树
    二叉树新的一种新建思路和遍历思路
    (简单但不容易写全对)逆置数组
    (经典)二叉树的层次遍历和快速排序
  • 原文地址:https://www.cnblogs.com/Blue233333/p/8183511.html
Copyright © 2011-2022 走看看