bzoj 1076(狀壓dp)(期望dp)

2021-08-07 18:31:33 字數 633 閱讀 6045

傳送門

題解:dp[i][j]表示第i輪狀態為j(狀態中為1的位表示當前物品還沒被取走)的最大期望得分。為了防止從無效狀態轉移至有效狀態,採用倒推法,從已知的有效狀態往回推,具體注釋在**中。

p.s.不寫memset可以快接近一倍,但是為了思維嚴密性,還是寫乙個,反正都能過(´∇`)

注意:由於吃過的寶物可以再吃(只有前提集合滿足),所以if語句不能再加如下條件:(j&(1<<(k-1)))==0

#include

using

namespace

std;

const

int maxn=17;

int k,n,temp;

int val[maxn],st[maxn];

double dp[102][1

<<17];

int main()

memset(dp,0,sizeof(dp));

for (int i=k;i;--i)

for (int j=0;j<=(1

<1;++j)

printf("%.6lf\n",dp[1][0]);

return

0;}

BZOJ1076 獎勵關(狀壓期望dp)

好像noip一眼看去,全是dp。題面題意 有k個回合,n個物品,每回合隨機掉乙個物品i,有p i 的價值。可以選擇撿或不撿。對於每件物品,若想撿它,都要撿完它的先決物品,問最大期望價值。n 15,k 100。大概就是個狀壓dp,用f s i 表示i回合選了集合s的物品,所得到的最大期望。若每回合都必...

BZOJ 1076 獎勵關 狀壓期望DP

當前得分期望 上一輪得分期望 這一輪得分 m dp i,j 第i輪拿的物品方案為j的最優得分期望 如果我們正著去做,會出現從不合法狀態 比如前i個根本無法達到j這種方案 所以從後向前推 如果當前方案j裡具備了取k這個物品的條件 那麼dp i,j max 否則dp i,j dp i 1,j inclu...

bzoj1076 獎勵關 狀壓dp 概率dp

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