题目大意:n个物品,每次有pi的概率买到,可以重复买,也可以什么都没买到,但算一次购买,问把所有东西都买到的期望次数。对于10%的数据,N = 1;对于30%的数据,N ≤ 5;对于100%的数据,N ≤ 20 ,0 < Wi ≤ 10^9 ,0 < Pi ≤ 1且∑Pi ≤ 1

刚看到这道题,我去,概率与期望,心凉了一半(太菜了。。)放到了最后做。

n很小,所以考虑状压,f[i]表示当前n种物品的状态为i的期望购买次数,0表示买了,1表示没买(我正好跟别人反着QAQ),根据以往期望题的惯例,考虑倒着转移,所以f[i]就是状态为i,到全买到的期望购买次数。f[0]表示全买了,到全买的期望是0,f[1<<n+1)-1]表示都没买,即最终答案。

转移方程就是f[i]=Σ(f[j]+1)*p[k]+(1-Σp[k])*(f[i]+1)   j比i多一个0就是多买到一种,k就是那种物品

意思就是从f[j]转移的期望与这次购买什么都没买到或买到了重的的期望,Σp[k]表示买到新物品的概率,1-Σp[k]就是买旧的或不买,这是状态不会改变,从f[i]转移过来。

两边都有f[i],高斯消元?假的,移一下项就得到了f[i]=Σf[j]*p[k]/Σp[k].

考试的时候推式子没有考虑买一样的东西,期望题真是弱爆了,而且n==1那个点也没想到要输出1/p[1]  谁知道想啥呢,而且考试时一个题思路不是很清晰而且样例一直过不去,做了1小时以上了,就先把它放一放,努力拿最高分。

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
int n,b[(1<<21)+15];
ll w[25],ans;
double p[25],pp,pi,f[(1<<21)+15];
int lowbit(int x)
{return x&(-x);
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lf%lld",&p[i],&w[i]);if(p[i]>0) ans+=w[i];}printf("%lld\n",ans);for(int i=0;i<=n;i++){b[1<<i]=i;}for(int i=0;i<=(1<<n+1)-1;i++){double h=0;for(int j=i;j;j-=lowbit(j)){int tmp=lowbit(j);f[i]+=f[i-tmp]*p[b[tmp]];h+=p[b[tmp]];}if(h) f[i]=(f[i]+1)/h;}printf("%.3lf\n",f[(1<<n+1)-1]);return 0;
}

别颓

转载于:https://www.cnblogs.com/jrf123/p/11198805.html

7.16 T1 礼物相关推荐

  1. 初学者如何提高跑步速度_2020年假日:您最喜欢的跑步者的16个礼物创意

    初学者如何提高跑步速度 Maridav/ShutterstockMaridav /快门 Have some friends or family members who love putting on ...

  2. 16进制、Cstring、char*类型转换

    //char*转16进制 DWORD HEXS(char *decString) {DWORD hexValue=0;DWORD sl=0;BOOL isWhile=FALSE;DWORD idx=0 ...

  3. MFC中将用户输入的表示16进制数的字符串转换成16进制数输出显示(包含1.wstring转成string的方法函数2.用boost库拆分字符串的函数3.字符转16进制数值的函数)

    前期准备: 1.电脑中安装好boost库,我的电脑中安装在C盘根目录下,如下图所示: 2.配置好boost环境变量,如下图所示: 3.开发环境VS2015,工程为MFC应用程序 需要的头文件如下: # ...

  4. 《剑指offer》全解(图文结合,通俗易懂,一篇看爽)

    3. 数组中重复的数字 题目链接 牛客网 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请 ...

  5. 剑指 offer 题目分析及答案

    1. 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到头打印链表 7. 重建二叉树 8. 二叉树的下一个结点 9. 用两个栈实现队列 ...

  6. Mysql练习题14-至少有5名直接下属的经理

    需求:Employee 表,请编写一个SQL查询来查找至少有5名直接下属的经理. 展示效果: Name John 1 Create table If Not Exists Employee (Id i ...

  7. 矩阵LU分解分块算法实现

    本文主要描述实现LU分解算法过程中遇到的问题及解决方案,并给出了全部源代码. 1. 什么是LU分解? 矩阵的LU分解源于线性方程组的高斯消元过程.对于一个含有N个变量的N个线性方程组,总可以用高斯消去 ...

  8. Python 守护线程

    Python 守护线程 如果你设置一个线程为守护线程,,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.  如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程 ...

  9. java线程 yield_Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

最新文章

  1. findclass java_Java Context.findClass方法代码示例
  2. STM32单片机外部中断配置讲解
  3. SLF4J 之logback.xml配置文件实例及其说明
  4. RHEL6 PXE+KickStart全自动安装配置指南
  5. 数字电路可控门电路原理(三态/同相/反相、缓冲/驱动电路)
  6. Android中的消息机制:Handler消息传递机制
  7. 高可用集群技术之corosync应用详解(一)
  8. android sqlite 操作类封装,[Android] Sqlite 数据库操做 工具封装类
  9. php 2个经纬度之间的距离,php计算两个经纬度之间的距离
  10. php webwxuploadmedia_PHP Web实现文件上传下载功能实例解析
  11. 树大招风:英伟达证实遭遇攻击,核心源代码惨遭泄露,75GB机密数据被公开
  12. 几行代码构建全功能对象检测模型,这位杜克大学学生做到了!
  13. Linux 命令(40)—— nohup 命令
  14. remote Incorrect username or password ( access token)问题解决
  15. python数字求和为什么得不出结果_WPS表格求和问题,只出公式不出结果数字
  16. python强行终止程序,如何终止Python脚本
  17. 机顶盒改成无线打印服务器,【当贝市场】如何将网络机顶盒改装成无线路由器...
  18. [转载]自动化行业信讯_史蒂文森sun_新浪博客
  19. OSChina 周一乱弹 ——东京12G
  20. ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately d

热门文章

  1. 一些数据结构的思想(3)
  2. python-文件基本操作(二)
  3. Ubuntu root 密码 sudo passwd
  4. Matlab中mat2cell的使用
  5. 典型的开发国内小项目没失败的经验分享
  6. 防止IE6出现BUG的十种常见解决方法
  7. 解决修改“文件夹选项”后仍不能显示隐藏文件一例
  8. 第19节 项目整体绩效评估.
  9. VS2013 VS2015 VS2017调试出现无法启动iis express web服务器
  10. 抽象:程序员必备的能力