题意:\(A,B\)两人,有\(N\)个事件,每件发生的概率都为\(0.5\),若事件\(i\)发生,则\(B\)加\(v_i\)分数,若其不发生,则\(B\)不加分,给定一个概率\(P\),问至少需要多少分数,才能使得$A $ 有\(P\)的概率分数不小于\(B\)

解:求出每种分值所对应的概率,问题就转换成,\(B\)获得每种分数\(i\)都有一概率\(q_i\),求最小的\(Ans\),满足\(\sum_0^{Ans}q_i <=P\).

dp + 前缀和.

#include<iostream>
#include<cstdio>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i = (a);i>=(b);--i)
#define endl '\n'
using namespace std;
typedef long long ll;
const int maxn = 4e4+10;//40000
int T,n;
int v[40+10];
double dp[40+1][maxn],p;
int main(){
scanf("%d",&T);
int ans = -1;
while(T--){
scanf("%d%lf",&n,&p);
rep(i,1,n) scanf("%d",&v[i]);
rep(i,1,n) rep(j,0,maxn-1) dp[i][j] = 0;
dp[0][0] = 1;
rep(i,1,n)per(j,maxn-1,0){
dp[i][j] += dp[i-1][j]*0.5;
dp[i][j + v[i]] += dp[i-1][j]*0.5;
}
double sum = 0;
for(int i = 0;i<maxn;++i){
sum += dp[n][i];
if(sum >= p){
ans = i;break;
}
}
printf("%d\n",ans);
}
return 0;
}

最新文章

  1. mybatis逆向工程生成JavaBean、dao、mapper generatorSqlmapCustom
  2. c#学习&lt;一&gt; 基础知识
  3. MyBatis中#,$的用法区别
  4. JSP知识点汇总
  5. python peewee.ImproperlyConfigured: MySQLdb or PyMySQL must be installed.
  6. Mongodb Management Studio
  7. 如何实现上下左右键盘控制焦点使之落在相邻文本框或下拉框中-Web开发/JavaScript
  8. statspack系列8
  9. Java POI 两种导出方式
  10. codeforces 613A. Peter and Snow Blower
  11. Spring IOC之基于注解的容器配置
  12. linux升级openssh7.4sp1
  13. jQuery(二) jQuery对Ajax的使用
  14. OpenCASCADE Trihedron Law
  15. Android启动过程分析
  16. Swagger使用指南
  17. 2018-2019-2 网络对抗技术 20165323 Exp4 恶意代码分析
  18. python简单入门
  19. [Solution] JZOJ-5818 做运动
  20. MySQL:数据查询

热门文章

  1. python写爬虫遇到需要解码js一些记录
  2. python 识别图片中的汉字
  3. mapreduce 倒序 排序 最简单 易上手
  4. static关键字的用法小结
  5. SpringBoot使用Undertow做服务器
  6. 运维自动化之ansible
  7. php mvc 模式的开发注意事项
  8. 查看memcache版本
  9. [drf]源码和序列化梳理
  10. hadoop2.7.7+habse2.0.5+zookeeper3.4.14+hive2.3.5单机安装