題意:給出n種物品,每種物品有牽制條件和價值,有k次選擇機會,每次每個物品等概率出現,問平均情況下最大收益。(n<=15)
首先看到這個n的範圍和限制條件就應該想到是狀壓。
定義陣列f[i][j]為當前處在第i次拋物品時間,狀態為j。
但是如果我們僅僅這樣定義並正向轉移就會遇到乙個問題:我們是有可能從無效狀態推出有效狀態,進而得出錯誤的結論的。例如,1的限制條件為2、3、4,那麼我們就有可能從f[3][0111(2)]推出f[4][1111(2)],進而得出錯誤的結論。
怎麼辦呢,倒推。可以確定的是,結尾狀態一定是合法的。
1bzoj1076//以後大概概率都倒推好了……
2 #include3 #include4 #include5 #include6
using
namespace
std;
7const
int maxk=105,maxn=20,maxa=(1
<<15);8
intn,ka,a[maxn],qianti[maxn];
9double
f[maxk][maxa];
10int
haha()
1119
int att=(1
<
20for(int i=ka;i;i--)
21for(int j=0;j)
2229 printf("
%0.6lf\n
",f[1][0
]);30}31
int sb=haha();
32int main()
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
題目傳送門 題目大意 總共有k次彈出寶物的機會,寶物共有n種,彈出不同的寶物的概率相同的,是每個寶物都有價值,和選擇這個寶物的限制 必須具有特定的寶物 問最後的最優期望是多少。思路 正向推概率,反向推期望。一看資料範圍就知道肯定是狀壓。這裡推薦乙個大佬的部落格 考慮f i j j為二進位制數,表示在...