BZOJ1076:奖励关(状压期望dp)
来源:互联网 发布:黑马程序员有公司要么 编辑:程序博客网 时间:2024/05/22 10:19
好像noip一眼看去,全是dp。
题面
题意:有k个回合,n个物品,每回合随机掉一个物品i,有P[i]的价值。可以选择捡或不捡。对于每件物品,若想捡它,都要捡完它的先决物品,问最大期望价值。n≤15,k≤100。
大概就是个状压dp,用f[S][i]表示i回合选了集合S的物品,所得到的最大期望。
若每回合都必须选,k回合后得到的每个状态的概率才是可算的。但由于策略原因,到达最终的每个状态的概率并不可知,无法计算对答案的贡献。所以这题用逆推。(其实我也是看dalao题解知道的…)
所以,用f[S][i]表示i回合选了集合S的物品,再经过k-i个回合,所能得到的最大期望。
考虑第i+1个回合,掉每件物品的概率都是
枚举会掉的物品j,若S中并不包含j的全部先决物品,有
否则
f[0][1]为答案。
#include <iostream>#include <fstream>#include <algorithm>#include <cmath>#include <ctime>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define mmst(a, b) memset(a, b, sizeof(a))#define mmcp(a, b) memcpy(a, b, sizeof(b))typedef long long LL;int n,k,er[22];int need[22],val[22];double f[103][40040];int main(){ er[0]=1; for(int i=1;i<=20;i++) er[i]=er[i-1]*2; cin>>k>>n; for(int i=1;i<=n;i++) { scanf("%d",&val[i]); int x; scanf("%d",&x); while(x) { need[i]|=er[x-1]; scanf("%d",&x); } } for(int i=k;i>=1;i--) for(int s=0;s<er[n];s++) { for(int j=1;j<=n;j++) if((s&need[j])==need[j]) f[i][s]+=max(f[i+1][s],f[i+1][s|er[j-1]]+val[j]); else f[i][s]+=f[i+1][s]; f[i][s]/=n; } printf("%.6lf\n",f[1][0]); return 0;}
珂学真是太好玩了。
阅读全文
0 0
- BZOJ1076:奖励关(状压期望dp)
- bzoj1076 [SCOI2008]奖励关(期望+dp)
- bzoj1076 奖励关SCOI2008 状压与期望DP
- [BZOJ1076][SCOI2008]奖励关(状压dp+期望)
- 【BZOJ1076】【SCOI2008】奖励关(期望+状压dp)
- bzoj1076 [SCOI2008]奖励关 状压+期望dp
- [期望DP] BZOJ1076: [SCOI2008]奖励关
- BZOJ1076 奖励关 期望dp+状压
- 【BZOJ1076】[SCOI2008]奖励关【期望DP】【状压DP】
- [BZOJ1076]奖励关-状压+期望
- 【bzoj1076】【SCOI2008】【奖励关】期望最优值dp
- BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】
- [BZOJ1076][SCOI2008]奖励关(状压DP)
- 【BZOJ1076】【SCOI2008】奖励关&【BZOJ4318】OSU!()期望dp&【洛谷1850】换教室
- BZOJ 1076 奖励关 (状压期望dp)
- 【BZOJ1076】奖励关(动态规划,数学期望)
- BZOJ 1076 SCOI2008 奖励关 期望状压DP
- bzoj1076: [SCOI2008]奖励关 压状dp
- MapReduce实战之 WordCount
- 学习经历(直到拿到offer后,不更新)
- 奇葩公司规定之搞笑版(改编自真实规定)
- texlive2017安装
- 配置Log4j,使得MyBatis打印出SQL语句
- BZOJ1076:奖励关(状压期望dp)
- TFboys:使用Tensorflow搭建深层网络分类器
- 查mysql bin-log
- 实现谣传QQ中的手段——“1像素页面保活”
- lintcode--最长上升子序列
- Spark程序的几个优化点
- 汇率换算自然语言理解功能IOS DEMO
- menuconfig详解(3)—— Advanced partition selection
- shell实现DNA转录和翻译