【BZOJ1076】【SCOI2008】獎勵關(DP、期望、狀壓)
Description
Solution
套路的狀壓期望DP題。。。
考慮倒退期望:設為一直到第輪、當前狀態為的最大分數。
轉移
若當前狀態滿足第個寶物的前提條件,那麼選擇取或不取。
若不滿足,那麼不取。
具體轉移方程參看程式碼。
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;
}
相關推薦
【BZOJ1076】【SCOI2008】獎勵關(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.27【BZOJ1076】【洛谷P4273】【SCOI2008】獎勵關(狀壓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
【後綴數組】【RMQ】HDU 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 題解 忽然翻到這道題目,突然發現就是前幾天一道考試題目。。。 題解: 樹哈希,既然只考慮這一棵樹,那麽,如果兩個點為根
【BZOJ】1801 [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 - 2392】Space 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
【LeetCode】11. Container With Most Water(盛最多水的容器)-C++實現的三種方法
本題是Bloomberg的面試題。 問題描述: 一、第一種方法-暴力解法 當我們在面試時想不到解題的方法時,不妨使用暴力解法,雙重遍歷陣列。 當 i = 0 時,使用指標 j 遍歷陣列,找到第一輪的最大值 area: 當i = 2 ,使用指標 j 遍歷
【360】2019秋招筆試題(圈地運動、Bitttts、魔法陣列)python
筆試已掛,諸位隨意看看就好,筆者程式設計水平一般。 木棍數n<3,不會組成多邊形;n>=3,只要判斷前n-1個的長度和是否比最大的那個大,大就說明能組成多邊形。 n = int(raw_input()) stem = map(int,raw_in