【BZOJ1076】[SCOI2008] 奖励关(状压DP)
大致题意: 总共有\(n\)个宝物和\(k\)个回合,每个回合系统将随机抛出一个宝物(抛出每个宝物的概率皆为\(1/n\)),吃掉一个宝物可以获得一定的积分(积分可能为负),而吃掉某个宝物有一定的前提,即先吃掉若干种宝物每个至少一次,才能吃掉该宝物。请你求出在最优策略的情况下的最优得分。
状压\(DP\)
由于这道题的数据范围很小,我们可以考虑状压\(DP\),状压DP就是用一个数二进制下的每一位来存储一个信息,这里就用来存储某个宝物是否被吃掉过。
我们可以用\(f[i][j]\)记录第\(i\)个回合,当前状态为\(j\)时能获得的最大收益。
如果我们正着DP,那么显然可以发现,当我们要从一个状态转移至另一个状态时,有可能前一个状态无法得到,因此我们要倒着推。
这样,我们就能得出DP转移方程:
f[i][j]+=max(f[i+1][j],f[i+1][j|(1<<(q-1))]+a[q]);
其中,我们要满足当前状态\(j\)满足吃掉宝物\(q\)所需的条件,然后枚举每一个符合条件的\(j\)即可。
注意,要判断当前状态\(j\)是否满足条件,有个很简单的方法:判断\(j\)&\(s[q]\)(\(s[q]\)存储吃掉宝物\(q\)所需的条件,这里也利用了状态压缩)是否等于\(s[q]\),如果相等,便说明\(j\)这个状态中包含了\(s[q]\),即说明当前状态满足吃掉宝物\(q\)所需的条件。
状压\(DP\)
#include<bits/stdc++.h>
#define N 15
#define K 100
using namespace std;
int n,k,a[N+5],s[N+5];
double f[K+5][(1<<N)+5];
inline char tc()
{
static char ff[100000],*A=ff,*B=ff;
return A==B&&(B=(A=ff)+fread(ff,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0;int f=1;char ch;
while(!isdigit(ch=tc())) f=ch^'-'?1:-1;
while(x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
x*=f;
}
int main()
{
register int i,j,q;
for(read(k),read(n),i=1;i<=n;++i)
for(read(a[i]),read(j),s[i]=0;j;read(j))
s[i]|=1<<(j-1);//用状态压缩将吃掉宝物所需的条件存储下来
for(i=k;i;--i)//倒着进行DP
for(j=0;j<(1<<n);++j)
{
for(q=1;q<=n;++q)
{
if((j&s[q])==s[q]) f[i][j]+=max(f[i+1][j],f[i+1][j|(1<<(q-1))]+a[q]);//判断是否满足条件,更新答案
else f[i][j]+=f[i+1][j];
}
f[i][j]/=n;//由于每种情况的概率是1/n,所以要除以n
}
return printf("%.6lf",f[1][0]),0;
}
【BZOJ1076】[SCOI2008] 奖励关(状压DP)的更多相关文章
- [BZOJ1076][SCOI2008]奖励关 状压dp
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3070 Solved: 1595[Submit][Statu ...
- BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
- 【BZOJ1076】[SCOI2008]奖励关 状压DP+期望
[BZOJ1076][SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...
- SCOI2008奖励关 [状压dp]
题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再 ...
- B1076 [SCOI2008]奖励关 状压dp&&期望dp
这个题的n<15,一看就是状压dp.但是状态不是很好想.f[][]存i关的状态j. 这个题另一个关键思想在于倒推,我一开始想的是正推,但是只能记忆化了. 题干: 题目描述 你正在玩你最喜欢的电子 ...
- 洛谷 P2473 [SCOI2008]奖励关(状压dp+期望)
题面 luogu 题解 \(n \leq 15\) 状压 \(f[i][S]\)表示第\(i\)轮,吃过的集合为\(S\) 正着转移好像有点复杂 考虑逆推转移(正着转移应该也行) \(f[i][S]\ ...
- 洛谷P2473奖励关——状压DP
题目:https://www.luogu.org/problemnew/show/P2473 还是对DP套路不熟悉... 像这种前面影响后面,而后面不影响前面的问题就应该考虑倒序递推: 看n只有15那 ...
- [SCOI2008]奖励关 - 状压动规 - 概率与期望
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝 ...
- BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3074 Solved: 1599 [Submit][Sta ...
- bzoj1076: [SCOI2008]奖励关(期望dp+状压dp)
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2989 Solved: 1557[Submit][Statu ...
随机推荐
- 洛谷P3258 [JLOI2014]松鼠的新家
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- centos 7 安装python3
centos系统默认已安装python2.7,python3需要手动安装.以上是安装步骤 一.备份原来的2.7版本 首先看一下默认的python2.7在哪里 [root@apple ~]# cd / ...
- 外企面试,哪有你想象的那么难!(已收埃森哲、NTTDATA等8家外企offer)
无精疯,一名背包客,大学期间穷游了十余个国家,五十余座城市,也是一位拥有健身教练证的业余健身痴迷者.从大二开始自学Java并开始了第一份实习,后面也是通过自学转到了大数据,之前在一家大数据独角兽实习, ...
- Tomcat&Servlet
Tomcat&Servlet 一.web开发相关的概念 1. 软件架构 1.1 C/S架构 C:Client客户端, S:Server服务器 比如:QQ.微信.大型网游 优点: 显示效果炫 安 ...
- 最大加权矩形 压缩+前缀和+dp
题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没 ...
- tomcat内存配置
-Xms521M-Xmx1024M-XX:PermSize=64M -Xms256m -Xmx1024m -XX:MaxPermSize=256m
- 【ACM】棋盘覆盖 - 大数除
棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...
- 用汇编实现add函数
平台 macOS 工具 nasm clang 文件 main.c #include <stdio.h> int add(int a, int b); int main() { printf ...
- JSP中,EL表达式向session中取出一个attribute和JSP脚本访问session取出一个attribute,写法有何不同?(转自百度知道)
EL表达式使用起来会更简洁,假如session中有一个属性A(attrA),那么EL和jsp脚本取值的方式如下: EL表达式:${ sessionScope.attrA } JSP脚本:<%=s ...
- 利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能
事由: 这两天mentor给我布置了个任务让我用BenchmarkDotNet工具去测试一下同一个API 用同步和异步方法写性能上有什么差别. 顺带提一下: 啊啊啊啊 等我仔细看文档的时候文档 发现它 ...