ACMer去刷题吧 XDU1020

1.题目描述:点击打开链接

2.解题思路:本题利用概率dp解决。根据题意描述,我们可以定义d(i,j)表示前i道题做对j道的概率。那么根据全概率公式,可以得到如下递推式:

d(i,j)=d(i-1,j)*(1-p[i])+d(i-1,j-1)*p[i](0≤j≤i)

其中p[i]表示第i道题做对的概率。这样,得到所有的d值后,ans=sum{d(i,j)|k≤j≤n}

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;

#define N 1000+10
double p[N];
double d[N][N];
int n, k;

int main()
{
	//freopen("t.txt", "r", stdin);
	int T;
	scanf("%d", &T);
	while (T--)
	{
		scanf("%d%d", &n, &k);
		memset(p, 0, sizeof(p));
		memset(d, 0, sizeof(d));
		for (int i = 1; i <= n; i++)
			scanf("%lf", &p[i]);
		d[0][0] = 1.0;
		for (int i = 1; i <= n; i++)
		for (int j = 0; j <= i; j++)//注意,j一定要从0开始算起
		{
			d[i][j] = d[i - 1][j] * (1 - p[i]);
			if (j)d[i][j] += d[i - 1][j - 1] * p[i];
		}
		double ans = 0.0;
		for (int j = k; j <= n; j++)
			ans += d[n][j];
		printf("%.4lf\n", ans);
	}
	return 0;
}
时间: 2024-10-21 03:38:45

ACMer去刷题吧 XDU1020的相关文章

XDOJ 1020 ACMer去刷题吧(基础dp)

题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输入一个正整数t,(t<=20),表示有t组测试样例. 第二行输入正整数n,k,(1<=n,k<=1000) 第三行输入n个小数,分别为Pi(1<=i<=n,0<=Pi<=1),表示小X做对第i个题目的概率. 输出 输出小X至少做对k道题的概率,并换行(保留4位小数)

国内有哪些好的刷题网站?

http://www.zhihu.com/question/25574458 Luau Lawrence,Data Mining 弱鸡 / [email protected] 温梦强.石一帆.知乎用户 等人赞同 - Welcome To PKU JudgeOnline 北京大学的Online Judge.POJ上面的题目有点老了,但好处是做的人多,经典算法题多,解题报告也多,适合上手.- ZOJ :: Home 浙江大学的Online Judge.ZOJ用的不多,但为数不多的几次体验好像都还可以

HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)

前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页) 2.[C#] 逆袭--自制日刷千题的AC自动机攻克HDU OJ 3.C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~ 4.继续Node爬虫 - 百行代码自制自动AC机器人日解千题攻占HDOJ 当初抱着想试试的想法,用过他们的程序,嗯~ o(* ̄▽ ̄*)o. 1.比如那个用C

用js刷题的一些坑

leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也是引用对象,这点常常被忽视,所以在递归的时候传递数组要用arr.slice(0)这样复制一个一样的新数组,不然会出现你传入的数组会被同级的递归改变,结果就不对了. 所以只要数组复制的地方最好都要这么写,除非你真的想引用.而且注意是slice不是splice这两个方法差别很大,你如果用splice(0

刷题记录

刷题啦,刷题啦,咱也刷算法题. 先从牛客网的JS方面刷起,接着刷数据结构和算法,然后去刷leetcode,这儿记载自己从出错的地方. 1.题目描述 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 . 没有认真思考,写下了如下的答案 function removeWithoutCopy(arr, item) { for(i = 0; i < arr.length; i++) { if( arr[i] === item) { arr.spli

停课刷题总结-给自己一点鼓励吧

嗯,我已经停了四五天课在家刷BZOJ准备复赛了,感觉压力好大.但是,实际上感觉效率并不高,每天就是7-8题的样子,而且并不是每题都有质量.而且这几天刷下来,我貌似因为刷了太多水题的关系,打字写题的速度变慢了,有一点悠闲没有紧迫感了,要赶快把这个习惯给改掉!今天去学校做题被虐了,竟然一个简单的Hash没有调对[虽然我现在还是不知道为什么会死循环QAQ.]感觉吧,可能因为刷题有点不在状态了.[其实也因为刷题的间隙玩了几盘LOL,游戏这东西QAQ]被虐了,感觉很不爽,有点难受,毕竟我付出了那么多努力,

轻院 2177 小姐姐的忠告:少吃辣条多刷题

题目链接:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2177 题目大意:n个球放入n个箱子中,每个箱子放一个.每个球都是独一无二的,问方案数能被最大2的几次方整除. 解题思路:很明显方案数目就是n!,而所求的实际上是2~n中每个数的中有几个2.显然奇数可忽略,对于1~n的所有偶数来说,一次除二之后所有数都缩小了一半,即相当于求1~n/2的所有偶数,反复如此,可以很快得到思路. 代码: 1 const int inf = 0x3f3f3f3f

基于C#解决OJ刷题之输入输出问题的总结(AKOJ1064-1071A+B问题汇总)

声明:题目部分为akoj题目,代码为本人AC代码. 因为本人学校的oj支持各种环境,非常正常的当中就包括了C#.然暑假在家较为空暇,本着学习C#和复习算法的态度和目的,就又開始折腾起oj了. 题目部分是最基础的A+B系列,来看看C#的输入输出是怎么一回事吧 题目地址:http://183.167.205.82:8081/JudgeOnline/problemlist?volume=1 本文由csdn-jtahstu原创.转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:137375842

周刷题第一期总结(two sum and two numbers)

由于深深的知道自己是事件驱动型的人,一直想补强自己的薄弱环节算法,却完全不知道从哪里入手.所以只能采用最笨的办法,刷题.从刷题中遇到问题就解决问题,最后可能多多少少也能提高一下自己的渣算法吧. 暂时的目标是一周最少两道,可能会多做多想,工作再忙也会完成这个最低目标. Two sum: Given an array of integers, return indices of the two numbers such that they add up to a specific target. Y