1. 程式人生 > >【BZOJ1076】【SCOI2008】獎勵關(DP、期望、狀壓)

【BZOJ1076】【SCOI2008】獎勵關(DP、期望、狀壓)

Description

Solution

套路的狀壓期望DP題。。。

考慮倒退期望:設fi,j為一直到第i1輪、當前狀態為j的最大分數。

轉移

若當前狀態滿足第k個寶物的前提條件,那麼選擇取或不取。
若不滿足,那麼不取。
具體轉移方程參看程式碼。

Source

/**********************************
 * Au: Hany01
 * Prob: BZOJ1076 & SCOI2008 獎勵關
 * Date: Feb 4th, 2018
 * Email: [email protected]
**********************************/
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set> using namespace std; typedef long long LL; #define For(i, j, k) for (register int i = (j), i##_end_ = (k); i <= i##_end_; ++ i)
#define Fordown(i, j, k) for (register int i = (j), i##_end_ = (k); i >= i##_end_; -- i) #define rep(i, k) for (register int i = 0, i##_end_ = (k); i < i##_end_; ++ i) #define Set(a, b) memset(a, b, sizeof(a)) #define Cpy(a, b) memcpy(a, b, sizeof(a)) #define fir first #define sec second #define pb(a) push_back(a)
#define mp(a, b) make_pair(a, b) #define ALL(a) (a).begin(), (a).end() #define SZ(a) ((int)(a).size()) #define INF (0x3f3f3f3f) #define INF1 (2139062143) #define Mod (1000000007) #define debug(...) fprintf(stderr, __VA_ARGS__) template <typename T> inline bool chkmax(T &a, T b) { return a < b ? a = b, 1 : 0; } template <typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; } inline int read() { register int _ = 0, __ = 1; register char c_ = getchar(); for ( ; c_ < '0' || c_ > '9'; c_ = getchar()) if (c_ == '-') __ = -1; for ( ; c_ >= '0' && c_ <= '9'; c_ = getchar()) _ = (_ << 1) + (_ << 3) + (c_ ^ 48); return _ * __; } inline void File() { #ifdef hany01 freopen("bzoj1076.in", "r", stdin); freopen("bzoj1076.out", "w", stdout); #endif } const int maxn = 16, maxk = 101; int K, n, p[maxn], pre[maxn], all, tmp; double f[maxk][1 << maxn]; int main() { File(); K = read(), n = read(); For(i, 1, n) { p[i] = read(); while (tmp = read()) pre[i] |= (1 << (tmp - 1)); } all = (1 << n); //f[i][j]: Before the i_th round, when the condition is j, maximize the scores. Fordown(i, K, 1) rep(st, all) { For(k, 1, n) if ((pre[k] & st) == pre[k]) f[i][st] += max(f[i + 1][st], f[i + 1][st | (1 << (k - 1))] + p[k]); else f[i][st] += f[i + 1][st]; f[i][st] /= n; } printf("%.6lf\n", f[1][0]); return 0; }

相關推薦

BZOJ1076SCOI2008獎勵DP期望

Description Solution 套路的狀壓期望DP題。。。 考慮倒退期望:設fi,jfi,j為一直到第i−1i−1輪、當前狀態為jj的最大分數。 轉移 若當前狀態滿足第kk個

題解 bzoj1076: [SCOI2008]獎勵 +期望dp

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

2018.09.27BZOJ1076洛谷P4273SCOI2008獎勵DP期望DP

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

BZOJ1076獎勵動態規劃,數學期望

題面 懶,粘地址 題解 我也是看了題解才會做 看著資料範圍,很容易想到狀壓 然後,設f[i][j]表示當前第i輪,狀態為j的期望 列舉當前掉出來哪一個物品 然後。。。。怎麼轉移???

bzoj 1076[SCOI2008]獎勵dp+概率

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

後綴數組RMQHDU 6194 - string string string 2017ICPC沈陽網絡賽

namespace 記得 initial acmer panel tom 技術 one ack string string string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768

shiro登錄經歷的流程執行ShiroAccountRealm doGetAuthenticationInfo經歷的過程

tor quest count ont lin etsec ret ebs com http://jinnianshilongnian.iteye.com/blog/2025656 攔截器機制。 在這裏 @Bean(name = "shiroFilter") pu

[BZOJ1076][SCOI2008]獎勵(概率DP)

har getch IV AC name else str mes family Code #include <cstdio> #include <algorithm> #include <cstring> #define N

BZOJ3162獨釣寒江雪樹哈希,動態規劃

const pac string fine bool names 1=1 max 題解 【BZOJ3162】獨釣寒江雪(樹哈希,動態規劃) 題面 BZOJ 題解 忽然翻到這道題目,突然發現就是前幾天一道考試題目。。。 題解: 樹哈希,既然只考慮這一棵樹,那麽,如果兩個點為根

BZOJ1801 [Ahoi2009]chess 中國象棋dp

發現 lin max def %d print class () line 題目 傳送門:QWQ 分析 發現我們關心的不是棋子的位置,我們只關心棋子數量就ok。 首先每行每列最多兩個棋子。這是顯然的。 然後我覺得本題最難的部分就是對行進行討論,蒟蒻

python練習基於socket的FTP程序僅支持單用戶

查看 切換目錄 md5加密 查看當前目錄 傳輸 conf 存儲 settings ces 程序功能: 本程序模擬實現了一個FTP程序: 1.程序分為客戶端和服務端 2.用戶可以登錄和註冊賬號,登錄密碼有MD5加密 3.每個用戶有自己的家目錄 ,且只能訪問自己的家目錄 4.用

BZOJ1294[SCOI2009]圍豆豆動態規劃,

bool pre max += 網格 中心 是否 ret algo 【BZOJ1294】[SCOI2009]圍豆豆(動態規劃,狀壓) 題面 BZOJ 洛谷 題解 首先考慮如何判斷一個點是否在一個多邊形內(不一定是凸的),我們從這個點開始,朝著一個方向畫一條射線,看看它和這個

BZOJ1488[HNOI2009]圖的同構Burside引理,Polya定理

兩個 選擇 設有 就是 距離 總數 fin 一個 不存在 【BZOJ1488】[HNOI2009]圖的同構(Burside引理,Polya定理) 題面 BZOJ 洛谷 題解 求本質不同的方案數,很明顯就是群論這套理論了。 置換一共有\(n!\)個,考慮如何對於任意一個置換求

PHP原生xml和數組互轉微信支付簽名算法

互轉 amp 字母 ble md5加密 clas toarray sig val 數組轉XML publicfunction arrayToXml($arr) { $xml ="<xml>"; foreach($arr as $key =&g

題解洛谷P2577 [ZJOI2005] 午餐DP+貪心

次元傳送門:洛谷P2577  思路 首先貪心是必須的 我們能感性地理解出吃飯慢的必須先吃飯(結合一下生活) 因此我們可以先按吃飯時間從大到小排序 然後就能自然地想到用f[i][j][k]表示前i個人在第一個視窗排隊用了j時間 在第二個視窗排隊用了k時間 然後就自然地炸空間了 所以我們要

jzoj5939 NOIP2018模擬10.30阻擊計劃 樹上小度數

對於所有資料 n≤1000,m≤5000,每條道路的花費≤10000 分析 假如一開始就是偶環必然要刪掉。 假如是奇環,相交之後會形成一個偶環,只要邊不相交就行。 考慮到兒子數很少,設狀態

密碼學RSA加密 kotlin實現方法支持任意字節長度

奇怪 adk mvn 部分 put raw tput c++ ide 這個編輯器不支持kotlin,尷尬了···· 算了,就用Java來弄吧 val 定義常量 var 定義變量 具體kotlin的開發手冊詳見:http://www.runoob.com/kotlin/kot

POJ - 2392Space Elevator dp,優秀的揹包問題

題幹: The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a giant tower of blocks. They have K (1 <= K

LeetCode11. Container With Most Water盛最多水的容器-C++實現的三種方法

本題是Bloomberg的面試題。 問題描述:  一、第一種方法-暴力解法   當我們在面試時想不到解題的方法時,不妨使用暴力解法,雙重遍歷陣列。 當 i = 0 時,使用指標 j 遍歷陣列,找到第一輪的最大值 area: 當i = 2 ,使用指標 j 遍歷

3602019秋招筆試題圈地運動Bitttts魔法陣列python

筆試已掛,諸位隨意看看就好,筆者程式設計水平一般。 木棍數n<3,不會組成多邊形;n>=3,只要判斷前n-1個的長度和是否比最大的那個大,大就說明能組成多邊形。 n = int(raw_input()) stem = map(int,raw_in