第一行為兩個正整數$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。只有當...