poj 2151 01背包

本文介绍了一种解决特定概率问题的方法,通过编程实现每队至少解出一道题及解出不多于n道题的概率计算,并给出了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在别人列出的题目里面这道题是被归类到hash里面的,然而没有想到如何转化成hash搜索

这道题就是求出   Π每队至少解出一道题= Π(1-每队解出0道题的概率)=P1, Π每队解出不多于n道题的概率 =P2

注意的是P2 不包括解出0道的概率

#include<iostream>  
#include<vector>
#include <string>   
#include<algorithm>  
#include<fstream>
#include<cmath>  
using namespace std;  
#define lch(i) ((i)<<1)  
#define rch(i) ((i)<<1|1)  
#define sqr(i) ((i)*(i))  
#define pii pair<int,int>  
#define mp make_pair  
#define FOR(i,b,e) for(int i=b;i<=e;i++)  
#define FORE(i,b,e) for(int i=b;i>=e;i--)  
#define ms(a)   memset(a,0,sizeof(a))  
const int maxnum =20010;
const int key = 177;
int tol,n,t,m,newn;

double dp[1005];



int main()    
{    
	/*fstream fin("G:/1.txt");*/
	
	while (scanf("%d%d%d", &m, &t, &n), n | t | m){
		/*fin>>m>>t>>n;*/
		double one=1.0,below=1.0;double tmp;
		FOR(i,1,t){
			ms(dp);
			dp[0]=1;
			FOR(j,1,m){
				/*fin>>tmp;*/
				scanf("%lf",&tmp);
				FORE(k,t,1){
					dp[k]=dp[k]*(1-tmp)+dp[k-1]*tmp;
				}
				dp[0]=dp[0]*(1-tmp);
			}
			one*=1-dp[0];
			double sum=0;
			FOR(j,1,n-1){
				sum+=dp[j]; 
			}
			below*=sum;
		}
		printf("%.3f\n",one-below);
	}
	return 0;
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值