bzoj1076 獎勵關 概率dp 狀態壓縮

2022-05-31 17:39:09 字數 794 閱讀 9593

第一行為兩個正整數$k$和$n$,即寶物的數量和種類。以下$n$行分別描述一種寶物,其中第乙個整數代表分值,隨後的整數依次代表該寶物的各個前提寶物(各寶物編號為$1到$n$),以$0$結尾。

輸出乙個實數,保留六位小數,即在最優策略下平均情況的得分。

1 21 0

2 01.500000

【資料規模】

$1<=k<=100$,$1<=n<=15$,分值為$[-10^6,10^6]$內的整數。

注意到n的值很小,考慮概率dp配合狀態壓縮儲存狀態。

設$f[i][j]$為從第$i$次開始接寶物,並且當前狀態為$j$的期望值。

若當前寶物可以被接住,則$f[i][j]=f[i][j]+max(f[i+1][j],f[i+1][j|p[k]]+v[k])$

否則,$f[i][j]+=f[i+1][j]$

實現不難,上**:

1 #include2 #include3

#define foru(i,x,y) for(int i=x;i<=y;i++)

4using

namespace

std;

5double f[105][65540];6

int n,k,t,v[20],d[20],p[20];7

intmain()

15for(int i=n;i;i--)

16 foru(j,0,p[k+1]-1

)21 printf("

%.6lf\n

",f[1][0

]);22 }

bzoj1076 獎勵關 狀壓dp 概率dp

題意 給出n種物品,每種物品有牽制條件和價值,有k次選擇機會,每次每個物品等概率出現,問平均情況下最大收益。n 15 首先看到這個n的範圍和限制條件就應該想到是狀壓。定義陣列f i j 為當前處在第i次拋物品時間,狀態為j。但是如果我們僅僅這樣定義並正向轉移就會遇到乙個問題 我們是有可能從無效狀態推...

bzoj1076 獎勵關 期望dp

題目傳送門 題目大意 總共有k次彈出寶物的機會,寶物共有n種,彈出不同的寶物的概率相同的,是每個寶物都有價值,和選擇這個寶物的限制 必須具有特定的寶物 問最後的最優期望是多少。思路 正向推概率,反向推期望。一看資料範圍就知道肯定是狀壓。這裡推薦乙個大佬的部落格 考慮f i j j為二進位制數,表示在...

BZOJ 1076 獎勵關 狀態壓縮DP

題目大意 寶物一共有n種,系統每次丟擲這n種寶物的概率都相同且相互獨立。也就是說,即使前k 1次系統都丟擲寶物1 這種情況是有可能出現的,儘管概率非常小 第k次丟擲各個寶物的概率依然均為1 n。獲取第i種寶物將得到pi 分,但並不是每種寶物都是可以隨意獲取的。第i種寶物有乙個前提寶物集合si。只有當...