题目描述

夏川的生日就要到了。作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物。

商店里一共有种礼物。夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得)。

每次,店员会按照一定的概率Pi(或者不拿出礼物),将第i种礼物拿出来。 季堂每次都会将店员拿出来的礼物买下来。没有拿出来视为什么都没有买到,也 算一次购买。

众所周知,白毛切开都是黑的。所以季堂希望最后夏川的喜悦值尽可能地高。

求夏川最后最大的喜悦值是多少,并求出使夏川得到这个喜悦值,季堂的期 望购买次数。

输入

第一行,一个整数N,表示有N种礼物。

接下来N行,每行一个实数Pi和正整数Wi,表示第i种礼物被拿出来的概率和 可以获得喜悦值。

输出

第一行,一个整数表示可以获得的最大喜悦值。

第二行,一个实数表示获得这个喜悦值的期望购买次数,保留3位小数

样例输入

3

0.1 2

0.2 5

0.3 7

样例输出

14

12.167

提示

对于10%的数据,N = 1
对于30%的数据,N ≤ 5
对于100%的数据,N ≤ 20 ,0 < Wi ≤ 10^9 ,0 < Pi ≤ 1且∑Pi ≤ 1

考试思路历程

考试时一看数据范围就知道是个状压,但凡是和概率dp结合起来就根本不会啊,只能qj测试点拿10分,考试的时候还怀疑测试点为什么不是三个概率取倒数加起来,

然后就只能拿10分滚粗了。(后来动动dalao解释说是因为他每次都有概率之和的概率拿出物品,有该物品的概率拿出该物品,这就显然不是概率之和了)。

题解

我们先设计zt,设dp[sta]为状态为sta的期望数,其中若第i位为1表示没买过,0表示买过

然后就可以愉快的转移了

$dp[i]=\Sigma{p[j]*dp[i|(1<<(j-1))]}+(1-\Sigma{p[j]})*dp[i]+1$

后面那一块就是转移到自己的概率。

然后化简一下,就变成了

$dp[i]=(\Sigma{p[j]*dp[i|(1<<(j-1))]}+1)/(\Sigma{p[j]})$

倒着枚举正着枚都行,博主是倒着枚举的,毕竟概率题套路嘛。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
double p[],f[<<|];
int w[];
int main(){
int n;
scanf("%d",&n);
long long resss=;
for(int i=;i<=n;i++){
scanf("%lf%d",&p[i],&w[i]);
resss+=w[i];
}
printf("%lld\n",resss);
int Max=(<<n)-;
f[Max]=;
for(int i=Max-;i>=;i--){
double pos=0.0,res;
for(int j=;j<=n;j++){
if(i&(<<(j-))) continue;
f[i]+=f[i|(<<(j-))]*p[j];
pos+=p[j];
}
f[i]=f[i]+1.0;
f[i]=f[i]*1.0/pos;
//cout<<f[i]<<endl;
}
printf("%.3lf",f[]);
}

最新文章

  1. 转:Webpack 指南(整理 草稿)
  2. 大叔也学Xamarin系列
  3. textarea{resize:none}
  4. NOJ 1074 Hey Judge(DFS回溯)
  5. spring data实现自定义的repository实现类,实现跟jpa联通
  6. 搭建Android 5.0开发环境
  7. HDU 3335
  8. 剑指offer系列40----机器人的运动范围
  9. haproxy实现mysql从库负载均衡
  10. 12个目标跟踪方面的资料12 Tracking
  11. 关于Shell中命令替换$(...)与后置引用`...`的不同
  12. Scala - 处理时间(nscala-time - Joda Time的scala封装)
  13. 使用C++实现功能下载文件
  14. Flask-SQLAlchemy 中多表链接查询(不使用外键)
  15. 使用VUE框架搭建项目基本步骤
  16. asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)
  17. AngularJS初始化静态模板
  18. 使用Apache Kylin搭建企业级开源大数据分析平台
  19. cpu_test
  20. Fang Fang---hud5455(字符串处理)

热门文章

  1. 命名规范 camel case, pascal case, hyphen
  2. python数字类型之math库使用
  3. JavaScript函数尾调用与尾递归
  4. &lt;(* ̄▽ ̄*)/低碳生活管理系统
  5. shell中sed的简单使用
  6. 高性能SQLServer分页语句
  7. java_day02_标识符等
  8. DataGrip导出查询结果数据
  9. 【wifi移植 3】开发板wifi自动获取IP
  10. QT容器类