1. 程式人生 > >bzoj 1076: [SCOI2008]獎勵關 (期望dp)

bzoj 1076: [SCOI2008]獎勵關 (期望dp)

1076: [SCOI2008]獎勵關

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1814  Solved: 992
[Submit][Status][Discuss]

Description

  你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裡,系統將依次隨機丟擲k次寶物,
每次你都可以選擇吃或者不吃(必須在丟擲下一個寶物之前做出選擇,且現在決定不吃的寶物以後也不能再吃)。
 寶物一共有n種,系統每次丟擲這n種寶物的概率都相同且相互獨立。也就是說,即使前k-1次系統都丟擲寶物1(
這種情況是有可能出現的,儘管概率非常小),第k次丟擲各個寶物的概率依然均為1/n。 獲取第i種寶物將得到Pi
分,但並不是每種寶物都是可以隨意獲取的。第i種寶物有一個前提寶物集合Si。只有當Si中所有寶物都至少吃過
一次,才能吃第i種寶物(如果系統丟擲了一個目前不能吃的寶物,相當於白白的損失了一次機會)。注意,Pi可
以是負數,但如果它是很多高分寶物的前提,損失短期利益而吃掉這個負分寶物將獲得更大的長期利益。 假設你
採取最優策略,平均情況你一共能在獎勵關得到多少分值?

Input

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

Output

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

Sample Input

1 2
1 0
2 0

Sample Output

1.500000

HINT

【資料規模】

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

Source



題解:期望dp

這一步的期望=(上一步的期望+這一步的得分)*當前的概率。

這道題如果正著推可能會產生很多廢棄的狀態,而且無法保證採取的是最有策略。所以我考慮到這推,那麼最後的答案就是f[1][0]。

f[i][j]表示第I步,寶物集合為j的期望。

f[i][j]=sigma(max(f[i+1][j],f[i+1][j|(1<<(k-1))]+val[k]))/n max中表示的是當前狀態掉落k這種寶石選與不選中取最優策略,要注意只有列舉的狀態中還有選k的所有前提時,才能選k。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 103
using namespace std;
int num[N];
double f[N][(1<<15)+100],val[N];
int n,m;
int main()
{
  scanf("%d%d",&n,&m);
  for (int i=1;i<=m;i++){
    scanf("%lf",&val[i]);
    int x;
    while (true){
        scanf("%d",&x); 
        if (!x) break; x--;
        num[i]+=(1<<x);
      }
  } 
  for (int i=n;i>=1;i--)
   for (int sta=0;sta<(1<<m);sta++){
      for (int k=1;k<=m;k++)
       if ((num[k]&sta)==num[k])
        f[i][sta]+=max(f[i+1][sta],f[i+1][sta|(1<<(k-1))]+val[k]);
        else f[i][sta]+=f[i+1][sta];
      f[i][sta]/=(double)m;
   }
   printf("%.6lf\n",f[1][0]);
} 


相關推薦

bzoj 1076: [SCOI2008]獎勵 期望dp

1076: [SCOI2008]獎勵關 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1814  Solved: 992 [Submit][Sta

[BZOJ 1076][SCOI2008]獎勵期望+狀壓Dp

方便 double spa solution bsp 所有 一個 int stream Description 你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裏,系統將依次隨機拋出k次寶物, 每次你都可以選擇吃或者不吃(必須在拋出下一個寶物之前做出選

BZOJ 1076: [SCOI2008]獎勵期望+狀壓DP

傳送門 題解 不能從前往後推,求期望的正確姿勢應該是從後往前。 每個物品有先決限制,我們將已獲得的物品狀壓起來。記f[i][s]為第i關開始前擁有集合s的得分期望。 列舉關卡數、集合和第i關的物品。若滿足先決條件,則f[i][s] += ma

BZOJ 1076 [SCOI2008]獎勵【狀態壓縮】【期望DP

基於hzwer的部落格。 lim[i]lim[i]lim[i]表示可以獲得iii得前提。 考慮倒推,當前狀態的期望=(上一個狀態的期望+這次得到的價值)/概率 #include <bits/stdc++.h> #define db double #d

BZOJ 1076([SCOI2008]獎勵-期望dp-從後向前)

1076: [SCOI2008]獎勵關 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 328  Solved: 199 [Submit][Status][Discuss] Description 你正在玩你最喜歡的電子遊

bzoj 1076: [SCOI2008]獎勵(期望DP,狀壓。)

Description   你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裡,系統將依次隨機丟擲k次寶物, 每次你都可以選擇吃或者不吃(必須在丟擲下一個寶物之前做出選擇,且現在決定不吃的寶物以後也不能再吃)。  寶物一共有n種,系統每次丟擲這n種寶物的概率

BZOJ 1076 SCOI2008獎勵 狀壓與期望DP

Problem Problem Description 你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裡,系統將依次隨機丟擲k次寶物,每次你都可以選擇吃或者不吃(必須在丟擲下一個寶物之前做出選擇,且現在決定不吃的寶物以後也不能再吃)。

bzoj 1076: [SCOI2008]獎勵 期望dp+狀態壓縮

Description   你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裡,系統將依次隨機丟擲k次寶物, 每次你都可以選擇吃或者不吃(必須在丟擲下一個寶物之前做出選擇,且現在決定不吃的寶物以後也不能再吃)。 寶物一共有n種,系統每次丟

2018.09.23 bzoj1076: [SCOI2008]獎勵期望+狀壓dp

傳送門 一道神奇的期望狀壓dp。 用f[i][j]f[i][j]f[i][j]表示目前在第i輪已選取物品狀態為j,從現在到第k輪能得到的最大貢獻。 如果我們從前向後推有可能會遇到不合法的情況。 所以我們

bzoj 1076: [SCOI2008]獎勵

目前 sin 最大 ios 有一個 決定 cpp 正在 gpo Description 你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裏,系統將依次隨機拋出k次寶物,每次你都可以選擇吃或者不吃(必須在拋出下一個寶物之前做出選擇,且現在決定不吃的寶物以後也不

洛谷P2473 [SCOI2008]獎勵期望+狀壓

har targe 期望 num include 不一定 stdin print 一個 傳送門 我數學期望還是太差了…… 先考慮狀壓模型,設$dp[i][S]$表示第$i$輪,當前寶物狀態為$S$,能獲得的最大期望分數 然而這個模型有

SCOI 2008 獎勵 期望DP + 狀態壓縮

任重而道遠 你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裡,系統將依次隨機丟擲k次寶物, 每次你都可以選擇吃或者不吃(必須在丟擲下一個寶物之前做出選擇,且現在決定不吃的寶物以後也不能再吃)。  寶物一共有n種,系統每次丟擲這n種寶物的概率都相同且相互獨立

[bzoj 1076][SCOI2008]獎勵

pan 遊戲 表示 bold paper esc max efi 決定 傳送門 Description 你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裏,系統將依次隨機拋出k次寶物, 每次你都可以選擇吃或者不吃(必須在拋出下一個寶物之前做出選擇,

BZOJ_P1076 [SCOI2008]獎勵(概率期望DP+狀態壓縮DP)

BZOJ傳送門 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1435 Solved: 804 [Submit][Status][Discus

BZOJ 1076 [SCOI2008]獎勵

看了資料範圍一目瞭然是狀態壓縮,然而對於每種情況有選和不選兩種情況,記錄已選的狀態,每次列舉關卡時判斷是否已選。 注意這種最優選擇一般都採取倒序才能排除掉一些不可預知的不合法情況,我正序寫了仨小時不

bzoj 1076】[SCOI2008]獎勵狀壓dp+概率

1076: [SCOI2008]獎勵關 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1817  Solved: 994 [Submit][Stat

1076. [SCOI2008]獎勵【狀壓DP+期望

下一個 blog pos out 至少 處理 hellip 每次 選擇 Description   你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裏,系統將依次隨機拋出k次寶物, 每次你都可以選擇吃或者不吃(必須在拋出下一個寶物之前做出選擇,且現在

【題解】 bzoj1076: [SCOI2008]獎勵 裝壓+期望dp

狀態 span 方程 con can i+1 std tin log 題面戳我 Solution 並不會做,看了下題解大概了解了。期望這個東西好難搞啊qwq 我們定義\(dp[i][j]\)表示第\(i\)步,拿到寶物前的狀態為\(j\)。 正著來會有很多不合法的情況,剔

2018.09.27【BZOJ1076】【洛谷P4273】【SCOI2008獎勵狀壓DP期望DP

洛谷傳送門 解析: 一眼看題面就是期望DP,再看資料範圍就知道是狀態壓縮 思路: 一般來說是期望倒著推,概率順著推,少數情況可以不遵守以上規則。 然而這個就顯然不是少數情況,我們仍然選擇倒推。 我們考慮什麼狀態能夠倒著轉移回來。 我們列舉下一輪丟出的寶物,看

BZOJ1076 [SCOI2008]獎勵

算法 結合 期望dp 枚舉 來源 獎勵 使用 狀態 題目 【算法】期望DP+狀壓DP 【題解】f[i][j]表示第i輪,狀態為j的期望得分。 期望DP一般倒著做,因為正著做的話會可能從很多狀態都可以滿足當前選擇,需要雙重枚舉。 而如果倒著做的話,是已知當前狀態枚舉後面的選擇