JZOJ6296 投票 期望概率 dp

2022-09-01 09:33:13 字數 1745 閱讀 5520

i個人有pip

i​的概率會選擇1,否則選擇0。求在n

n個人中選擇m

m個,1和0的個數相等的期望。30p

ts30

ptso

(3n)

o(3n

)暴力搜尋每乙個人是不選,選1還是選0。用狀壓記錄每一種選擇方案的概率。

空間複雜度o(2

n)o(

2n)。

好像o(4n

)o(4

n)還可以拿40pt

s40p

ts。**lin

klin

k100pt

s100

pts將p

ipi​

排序,如果此時最有方案中存在乙個選擇的人,他左右均有人且都沒有被選擇,那麼固定其他選擇的人,在剩餘的人中選擇,期望一定為乙個一次函式。所以這個人肯定王左或往右會更優。

所以設f[i

][j]

f[i]

[j]表示在[1,

i][1

,i]中選擇j

j個人選擇1,g[i

][j]

g[i]

[j]表示在[i,

n][i

,n]中選擇j

j個人選擇1。以ff

為例,如果這乙個位置選擇0,那麼f[i

][j]

=f[i

−1][

j−1]

×(1−

p[i]

)f[i

][j]

=f[i

−1][

j−1]

×(1−

p[i]

),如果這乙個位置選擇1,那麼f[i

][j]

=f[i

−1][

j−1]

×p[i

]f[i

][j]

=f[i

−1][

j−1]

×p[i

]。所以方程就是f[

i][j

]=f[

i−1]

[j]×

(1−p

[i])

+f[i

−1][

j−1]

×p[i

]f[i

][j]

=f[i

−1][

j]×(

1−p[

i])+

f[i−

1][j

−1]×

p[i]

最後列舉前面選多少人,以及前面幾個人選1,計算一下答案即可。

時間複雜度o(n

m)o(

nm)

#include

#include

using

namespace std;

const

int n=

2010

;double p[n]

,f[n]

[n],g[n]

[n],ans,maxn;

int n,m;

intmain()

for(

int i=n;i>=

1;i--

)for

(int j=

0;j<=m;j++

)for

(int i=

0;i<=m;i++

)printf

("%0.8lf"

,maxn)

;return0;

}

每日一題6 29

問題 given a sorted array nums,remove the duplicates in place do not allocate extra space for another array,you must do this by modifying the input arra...

6 29 題目及答案解析

1 專案經理發現乙個新風險,可能影響專案進度計畫。專案經理首先應該做什麼?a.建立減輕和應急計畫 b.確定風險的概率和影響 c.安排一次團隊會議 d.確定如何監督風險 答案 b。具體解析 該題考察了11.7監督風險中的風險識別。按照風險流程,識別風險後先進行定性風險分析,評估風險的概率和影響以及其他...

NOI2017模擬6 29 呵呵

考慮乙個特定形態的樹的貢獻,設點i的度數為d i 那麼答案就是 wdii?di 考慮prufer序,乙個度數為d i 的點出現的次數是d i 1,那麼就可以得到乙個很顯然的dp,f i j 表示前i個點的度數為i j fi,j d 0jfi?1,j?d?dn?2?j?d wd 1i?d 1 這個dp...