Little Tiger vs. Deep Monkey

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 2670    Accepted Submission(s): 921

Problem Description
A crowd of little animals is visiting a mysterious laboratory – The Deep Lab of SYSU.

“Are
you surprised by the STS (speech to speech) technology of Microsoft
Research and the cat face recognition project of Google and academia?
Are you curious about what technology is behind those fantastic demos?”
asks the director of the Deep Lab. “Deep learning, deep learning!”
Little Tiger raises his hand briskly. “Yes, clever boy, that’s deep
learning (深度学习/深度神经网络)”, says the director. “However, they are only ‘a
piece of cake’. I won’t tell you a top secret that our lab has invented a
Deep Monkey (深猴) with more advanced technology. And that guy is as
smart as human!”

“Nani ?!” Little Tiger doubts about that as he
is the smartest kid in his kindergarten; even so, he is not as smart as
human, “how can a monkey be smarter than me? I will challenge him.”

To
verify their research achievement, the researchers of the Deep Lab are
going to host an intelligence test for Little Tiger and Deep Monkey.

The
test is composed of N binary choice questions. And different questions
may have different scores according to their difficulties. One can get
the corresponding score for a question if he chooses the correct answer;
otherwise, he gets nothing. The overall score is counted as the sum of
scores one gets from each question. The one with a larger overall score
wins; tie happens when they get the same score.

Little Tiger
assumes that Deep Monkey will choose the answer randomly as he doesn’t
believe the monkey is smart. Now, Little Tiger is wondering “what score
should I get at least so that I will not lose in the contest with
probability of at least P? ”. As little tiger is a really smart guy, he
can evaluate the answer quickly.

You, Deep Monkey, can you work it out? Show your power!�

 
Input
The first line of input contains a single integer T (1 ≤ T ≤ 10) indicating the number of test cases. Then T test cases follow.

Each
test case is composed of two lines. The first line has two numbers N
and P separated by a blank. N is an integer, satisfying 1 ≤ N ≤ 40. P is
a floating number with at most 3 digits after the decimal point, and is
in the range of [0, 1]. The second line has N numbers separated by
blanks, which are the scores of each question. The score of each
questions is an integer and in the range of [1, 1000]�

 
Output
For each test case, output only a single line with the answer.
 
Sample Input
1
3 0.5
1 2 3
 
Sample Output
3
 
Source
 
一直没做过概率dp竟有些zz了,搞好久才看懂胜负的概率都是1/2,dp[i][j]表示处理前i件题目得到j分的概率,
那么有  dp[i][j]+=dp[i-1][j-a[i]]*0.5       j>=a[i];
             dp[i][j]+=dp[i-1][j]*0.5;
这两个式子分别表明了买和不买第i件物品得到j分的概率,加在一起就是前i件物品获得j分的概率了,加法和乘法定律要搞清楚。
这里我用了滚动数组优化,注意概率不同于价值,即使不买也会有一定的概率得到,所以j要循环到0;
 #include<bits/stdc++.h>
using namespace std;
#define eps 1e-8
double dp[];
int main()
{
int n,m,i,j,t,k;
int a[];
double P;
cin>>t;
while(t--){int s=;cin>>n>>P;
memset(dp,,sizeof(dp)); dp[]=1.0;
for(i=;i<=n;++i) cin>>a[i],s+=a[i];
for(i=;i<=n;++i){
for(j=s;j>=;--j){
dp[j]=dp[j]/;
if(j>=a[i]) dp[j]+=dp[j-a[i]]/;
}
}
double x=;
for(i=;i<=s;++i){
x+=dp[i];
if(x>=P||(fabs(x-P)<=eps)){cout<<i<<endl;break;}
}
}
return ;
}
 
 

HDU 4815 概率dp,背包的更多相关文章

  1. HDU 4599 概率DP

    先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这 ...

  2. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  3. hdu 3853 概率dp

    题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...

  4. hdu 4050(概率dp)

    算是挺简单的一道概率dp了,如果做了前面的聪聪于可可的话,这题不需要什么预处理,直接概率dp就行了... #include <stdio.h> #include <stdlib.h& ...

  5. hdu 1203 概率+01背包

    I NEED A OFFER! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  6. HDU 4405 (概率DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 题目大意:飞行棋.如果格子不是飞行点,扔骰子前进.否则直接飞到目标点.每个格子是唯一的飞行起点 ...

  7. HDU 4003 (树形DP+背包)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4003 题目大意:有K个机器人,走完树上的全部路径,每条路径有个消费.对于一个点,机器人可以出去再回来 ...

  8. HDU 1561 (树形DP+背包)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1561 题目大意:从树根开始取点.最多取m个点,问最大价值. 解题思路: cost=1的树形背包. 有 ...

  9. HDU 1011 (树形DP+背包)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1011 题目大意:树上取点,先取父亲,再取儿子.每个点,权为w,花费为cost,给定m消费总额,求最大 ...

随机推荐

  1. MySQL,sqlalchemy

    Mariadb 数据库是一堆表的集合 主键 外键 索引 安装: Centos7 [root@host]# mysqladmin -u root password "new_password& ...

  2. CCF 权限查询(模拟)

    试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统 ...

  3. Java设计原则—里氏替换原则(转)

    里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题. 继承的优点: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性: 提高代码的重用性: 子类 ...

  4. Java语法糖设计

    语法糖 Java语法糖系列,所以首先讲讲什么是语法糖.语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这 ...

  5. ansible一些基本操作

    一.介绍 特性 (1).no agents:不需要在被管控主机上安装任何客户端: (2).no server:无服务器端,使用时直接运行命令即可: (3).modules in any languag ...

  6. Docker-docker制作镜像

    一.下载镜像 a.以daocloud为mirror下载Nginx镜像 配置daocloud为mirror,下载Nginx镜像:(daocloud官网登陆后,发现镜像里找到Nginx镜像) 下载Ngin ...

  7. MVC的局部视图传参的小技巧--见人才网头部导航

    当我们设计一个局部视图时,当出现有类似导航的功能(如:选择左边的某个按钮跳到某个页,且顶部导航也作相印改变),如果我们选择把导航作为局部视图来处理,调用就可以做如下处理: @Html.RenderAc ...

  8. 20145324 《Java程序设计》第3周学习总结

    20145324 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 1.要产生对象必须先定义类,类是对象的设计图,对象是类的实例,建立实例要用new 2.参数名称与对象数据成员 ...

  9. mysql数据库无法连接(JDBC)java.net.ConnectException: Connection timed out

    数据库无法连接(JDBC) 用户名密码正确,但是一直报错:Connection timed out 后来知道了原因:我用的是BAE提供的云mysql数据库,对访问的IP有限制 ,所以在本机上无法连接. ...

  10. MySQL MERGE存储引擎 简介及用法

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...