1. 程式人生 > >【概率期望】題目總結

【概率期望】題目總結

今天講了講數學,期望這做了四道題,一塊寫個部落格記一下

CF540D Bad Luck Island
容易想到設 f [ i ] [ j ] [

k ] f[i][j][k] 表示剩下 i i r r
j j s s k k
p p 時候的概率,然後列舉遇見的是哪兩種人,算一下概率就好了,但算的時候注意不能直接算,因為同種的人不能遇見,所以要減掉

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 105
using namespace std;
int r,s,p;
double f[maxn][maxn][maxn],ans[3];

int main(){
	scanf("%d%d%d",&r,&s,&p);
	f[r][s][p]=1;
	for(int i=r;i>=0;i--)
		for(int j=s;j>=0;j--)
			for(int k=p;k>=0;k--){
				if(j && i) 
				f[i][j-1][k]+=f[i][j][k]*2*i*j/(double)((i+j+k)*(i+j+k-1)-i*(i-1)-j*(j-1)-k*(k-1));
				if(k && j) 
				f[i][j][k-1]+=f[i][j][k]*2*j*k/(double)((i+j+k)*(i+j+k-1)-i*(i-1)-j*(j-1)-k*(k-1));
				if(i && k) 
				f[i-1][j][k]+=f[i][j][k]*2*i*k/(double)((i+j+k)*(i+j+k-1)-i*(i-1)-j*(j-1)-k*(k-1));
			}
	for(int i=r;i>=0;i--) ans[0]+=f[i][0][0];
	for(int i=s;i>=0;i--) ans[1]+=f[0][i][0];
	for(int i=p;i>=0;i--) ans[2]+=f[0][0][i];
	printf("%.12lf %.12lf %.12lf\n",ans[0],ans[1],ans[2]);
	return 0;
}

CF696B Puzzles
因為對於一個節點 v v ,它父親的子節點在它前面的概率都是 0.5 0.5 ,所以就可以預處理節點 s i z siz f [ v ] = f [ u ] + 0.5 × ( s i z [ u ] s i z [ v ] + 1 ) f[v]=f[u]+0.5\times (siz[u]-siz[v]+1)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 100005
using namespace std;

inline int rd(){
	int x=0,f=1;char c=' ';
	while(c<'0' || c>'9') f=c=='-'?-1:1,c=getchar();
	while(c<='9' && c>='0') x=x*10+c-'0',c=getchar();
	return x*f;
}

int n,siz[N],cnt,to[N],nxt[N],head[N];
double f[N];

inline void add(int x,int y){
	to[++cnt]=y; nxt[cnt]=head[x]; head[x]=cnt;
}

void dfs1(int u,int fa){
	siz[u]=1;
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i]; if(v==fa)continue;
		dfs1(v,u); siz[u]+=siz[v];
	}
}

void dfs2(int u,int fa){
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i]; if(v==fa)continue;
		f[v]=f[u]+0.5*(siz[u]-siz[v]+1);
		dfs2(v,u);
	}
}

int main(){
	n=rd();
	for(int i=2;i<=n;i++){
		int fa=rd(); add(fa,i);
	}
	f[1]=1;
	dfs1(1,0); dfs2(1,0);
	for(int i=1;i<=n;i++) printf("%.1lf ",f[i]);
	return 0;
}

CF16E Fish
2 n 2^n 列舉還剩下的魚的集合,然後列舉那兩個魚遇見,算每條魚被吃掉的概率

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 20
using namespace std;
int n,ed,cnt[(1<<18)+5];
double a[maxn][maxn],f[(1<<18)+5];

inline int calc(int x){
	int ret=0;
	while(x){
		if(x&1) ++ret; x>>=1;
	} return ret;
}

int main(){
	scanf("%d",&n); ed=1<<n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%lf",&a[i][j]);
	for(int i=0;i<ed;i++) cnt[i]=calc(i);
	f[ed-1]=1;
	for(int i=ed-1;i>=1;i--)
		for(int j=1;j<=n;j++)
			if((1<<(j-1))&i)
			for(int k=j+1;k<=n;k++)
				if((1<<(k-1))&i){
					f[i^(1<<(k-1))]+=f[i]*2*a[j][k]/cnt[i]/(cnt[i]-1);
					f[i^(1<<(j-1))]+=f[i]*2*a[k][j]/cnt[i]/(cnt[i]-1);
				}
	for(int i=1;i<=n;i++)
		printf("%.6lf ",f[1<<(i-1)]);
	return 0;
}

CF601C Kleofáš and the n-thlon
一個有意思的題

注意到除了給定的這個人,其他人的水平都是一樣的,這意味著我們可以先算出一個人的,再 × ( m 1 ) \times (m-1) 就是其他所有人的,所以就可以設 f [ i ] [ j ] f[i][j] 表示前 i i 場比賽得到了 j j 分的概率,這樣給定人的排名期望就是分數比他小的那些值的和再 + 1 +1

滾動陣列優化一下空間,然後記一個字首和優化時間複雜度

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 105
#define maxm 100005
using namespace std;

inline int rd(){
	int x=0,f=1;char c=' ';
	while(c<'0' || c>'9') f=c=='-'?-1:1,c=getchar();
	while(c<='9' && c>='0') x=x*10+c-'0',c=getchar();
	return x*f;
}

int n,m,sc,a[maxn];
double f[2][maxm],sum,ans;

int main(){
	n=rd(); m=rd();
	for(int i=1;i<=n;i++){
		a[i]=rd(); sc+=a[i];
	}
	if(m==1) return puts("1"),0;
	f[0][0]=1; int now=1;
	for(int i=1;i<=n;i++){
		sum=f[now^1][0]; memset(f[now],0,sizeof f[now]);
		for(int j=1;j<=n*m;j++){
			f[now][j]+=sum,sum+=f[now^1][j];
			if(j>=a[i]) f[now][j]-=f[now^1][j-a[i]];
			if(j>=m
            
           

相關推薦

概率期望題目總結

今天講了講數學,期望這做了四道題,一塊寫個部落格記一下 CF540D Bad Luck Island 容易想到設 f [

BZOJ 2752 [HAOI2012]高速公路(road)線段樹概率期望

顯然, 概率期望是一個幌子。 設i−&gt;i+1i-&gt;i+1i−>i+1的邊長為a[i]a[i]a[i],那麼對於詢問區間[l,r][l,r][l,r],易知答案為(注意邊轉點對區間的小影響): ans=∑i=lra[i]∗(r+1

poj 2096 Collecting Bugs 概率DP逆向遞推求期望

tdi cor ros quick -a sim total 3.0 pla Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions

BZOJ4481: [Jsoi2015]非誠勿擾概率期望+樹狀陣列

Description 【故事背景】 JYY趕上了網際網路創業的大潮,為非常勿擾開發了最新的手機App實現單身 大齡青年之間的“速配”。然而隨著使用者數量的增長,JYY發現現有速配的演算法似 乎很難滿足大家的要求,因此JYY決定請你來調查一下其中的原因。 【問題描述】 應用的後臺一共有N個女性和M個男性,他

BZOJ4899: 記憶的輪廓概率期望DP決策單調性優化DP

Description 通往賢者之塔的路上,有許多的危機。 我們可以把這個地形看做是一顆樹,根節點編號為1,目標節點編號為n,其中1-n的簡單路徑上,編號依次遞增, 在[1,n]中,一共有n個節點。我們把編號在[1,n]的叫做正確節點,[n+1,m]的叫做錯誤節點。一個葉子,如果是正 確節點則為正確葉

BZOJ3925: [Zjoi2015]地震後的幻想鄉概率期望+狀壓DP

Description 傲嬌少女幽香是一個很萌很萌的妹子,而且她非常非常地有愛心,很喜歡為幻想鄉的人們做一些自己力所能及的事情來幫助他們。 這不,幻想鄉突然發生了地震,所有的道路都崩塌了。現在的首要任務是儘快讓幻想鄉的交通體系重新建立起來。幻想鄉一共有n個地方,那麼最快的方法當然是修復n-1條道路將這n個地

NOIP模擬 取書問題概率期望dp

題目描述 有n個同學坐成一列,按從前往後的順序傳n本書,第i本數是第i新的,其中第i個同學會從n-i+1本課本中選一本並把剩下的書傳給後面的一位同學,第i個同學在挑選課本的時候滿足 如下過程: 1.如果只剩一本書,則一定拿走,否則轉步驟2; 2.從剩下的數中抽出最新的一本。 3.有

概率dp滾動數組CDOJ1652 都市大飆車

ima 空間 pac names puts 都市 for 1.0 images 轉移方程很顯然。 因為是多段圖模型,所以可以滾動數組優化一維空間。 #include<cstdio> #include<cstring> using namespac

程序5 題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b這是條件運算符的基本例子。

window code 例子 prompt 利用 學習 amp text span if…else語句相對比較多,但是容易理解 1 var scroe = window.prompt("請輸入1-100之間的數") 2 scroe = parseInt

2017 ACM-ICPC 亞洲區(西安賽區)網絡賽: B. Coin 概率

con ont mat -1 bottom using -m desc element Bob has a not even coin(就是一個不均勻的硬幣,朝上的概率不一定是1/2), every time he tosses the coin, the probab

POJ3071 Football 概率dp

mem down matches pre opposite side instead losers rec 題目 Consider a single-elimination football tournament involving 2n teams, denoted 1,

概率機器人3.1 卡爾曼濾波、擴展卡爾曼濾波和無跡卡爾曼濾波

取出 嘗試 bar return tar 簡化 exp 回顧 clas 這一章將介紹卡爾曼濾波、擴展卡爾曼濾波以及無跡卡爾曼濾波,並從貝葉斯濾波的角度來進行分析並完成數學推導。如果您對貝葉斯濾波不了解,可以查閱相關書籍或閱讀 【概率機器人 2 遞歸狀態估計】。 這三種濾波方

bzoj 3029: 守衛者的挑戰概率dp

滾動數組 ios ble \n 轉移 spa min print amp 以後寫dp還是向後轉移吧……寫的把前面加起來的版本怎麽也調不過去 首先註意,因為地圖碎片只占1體積,所以>n,<-n的體積是沒用的,所以就可以把體積降到n級別,然後用這場勝負像後轉移即可,

1009E Intercity Travelling 數學期望

題目:戳這裡 題意:從0走到n,難度分別為a1~an,可以在任何地方休息,每次休息難度將重置為a1開始。求總難度的數學期望。 解題思路: 跟這題很像,利用期望的可加性,我們分析每個位置的狀態,不管怎麼休息位置1的難度永遠是a1,因此其期望為a1*2^(n-1),其他點出現a1的話,說明上一個點絕對休息過

網路協議專題總結以及網路協議高頻面試題彙總(8篇)

這是一份超詳細的HTTP協議攻略,內容大綱如下: 內容如下(點選即可跳轉): 一篇文章帶你詳解 HTTP 協議(上) 一篇文章帶你詳解 HTTP 協議之報文首部及欄位詳解(中) 一篇文章帶你詳解 HTTP 協議(下)   這是一份超詳細的TCP/IP協議

Bag of mice概率DP

概率DP與期望DP不同,這個是正序的,接下來上一下我的思路,先上題: Alice和Bob正在玩一個遊戲: 一個袋子裡一開始裝著w個白球和b個黑球。Alice和Bob輪流隨機抽出一個球(Alice先手)。如果抽出的球是白色的,則抽出這個球的人獲勝。每當一個球被Bob取出後,

codeforces 148DBag of mice概率dp記憶化

【連結】 【題意】 原來袋子裡有w只白鼠和b只黑鼠 ,龍和王妃輪流從袋子裡抓老鼠。 誰先抓到白色老鼠誰就贏。 王妃每次抓一隻老鼠,龍每次抓完一隻老鼠之後會有一隻老鼠跑出來。 每次抓老鼠和跑出來的老鼠都是隨機的。 如果兩個人都沒有抓到白色老鼠則龍贏。王妃先抓。

程式6  題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

在迴圈中,只要除數不等於0,用較大數除以較小的數,將小的一個數作為下一輪迴圈的大數,取得的餘數作為下一輪迴圈的較小的數,如此迴圈直到較小的數的值為0,返回較大的數,此數即為最大公約數,最小公倍數為兩數之積除以最大公約數。 import java.util.Scanner;