【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)
Solution
- 并不会做,看了下题解大概了解了。期望这个东西好难搞啊qwq
- 我们定义\(dp[i][j]\)表示第\(i\)步,拿到宝物前的状态为\(j\)。
- 正着来会有很多不合法的情况,剔除比较麻烦,我们反着来考虑,因为你想如何是合法,就是状态表示拿得物品个数小于等于步数嘛,倒着来最后答案根据我们状态定义可以知道,答案是\(dp[1][0]\)嘛,然后你想,我们每向前一次,就最多剔除一个宝物,最多剔除的就是\(K\)个,其余不合法的情况到最后不会剔除完,就不会被计入答案中
- 转移方程是$$dp[i][j]=dp[i][j]+\Sigma_{k=1}^n max(dp[i+1][j],dp[i+1][j|(sta[k])+s[k]])/n$$ 这个是在\(j\)状态下能加入\(k\)物品.
- 不然转移方程就是$$dp[i][j]=dp[i][j]+dp[i+1][j]/n$$
- 多做几道期望dp,感受下吧qwq
Code
//It is coded by ning_mew on 7.21
#include<bits/stdc++.h>
#define db double
using namespace std;
const int maxk=105,maxn=20;
int n,K;
int sta[maxn],s[maxn];
db dp[maxk][(1<<15)+100];
int main(){
scanf("%d%d",&K,&n);
for(int i=1;i<=n;i++){
int box=0;
scanf("%d",&s[i]);
while(1){
scanf("%d",&box);if(!box)break;
sta[i]=(sta[i]|(1<<(box-1)));
}
}
for(int i=K;i>=1;i--){
for(int j=0;j<=(1<<n)-1;j++){
for(int k=1;k<=n;k++){
if((sta[k]&j)!=sta[k]){dp[i][j]=dp[i][j]+dp[i+1][j]/n;continue;}
dp[i][j]=dp[i][j]+1.0*max(dp[i+1][j],dp[i+1][j|(1<<(k-1))]+s[k])/n;
}
}
}printf("%0.6f\n",dp[1][0]);return 0;
}
博主蒟蒻,随意转载。但必须附上原文链接:http://www.cnblogs.com/Ning-Mew/,否则你会场场比赛暴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次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
- bzoj 1076 奖励关 状压+期望dp
因为每次选择都是有后效性的,直接dp肯定不行,所以需要逆推. f[i][j]表示从第i次开始,初始状态为j的期望收益 #include<cstdio> #include<cstrin ...
- BZOJ 1076 奖励关(状压期望DP)
当前得分期望=(上一轮得分期望+这一轮得分)/m dp[i,j]:第i轮拿的物品方案为j的最优得分期望 如果我们正着去做,会出现从不合法状态(比如前i个根本无法达到j这种方案),所以从后向前推 如果当 ...
- 【BZOJ1076】[SCOI2008]奖励关 状压DP+期望
[BZOJ1076][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 ...
- 【BZOJ-1076】奖励关 概率与期望 + 状态压缩DP
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1602 Solved: 891[Submit][Status ...
- BZOJ1076: [SCOI2008]奖励关【状压DP+期望DP】
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
随机推荐
- Vue-认识状态管理vuex
vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试,可以多个组件共享状态.简单来说,就是共享的状态用state来存放,用mutations来操作state,但是 ...
- c# WPF 设置窗口一直在其中窗口后面/底层窗口
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 基于HTML5 Canvas 实现地铁站监控
伴随国内经济的高速发展,人们对安全的要求越来越高.为了防止下列情况的发生,您需要考虑安装安防系统: 提供证据与线索:很多工厂银行发生偷盗或者事故相关机关可以根据录像信息侦破案件,这个是非常重要的一个线 ...
- qa_model
[code=python] import os import sys import time import numpy import shelve import theano import thean ...
- 【Beta阶段】M2事后分析
先上照片,最后一次开会了啊... 计划 你原计划的工作是否最后都做完了? 如果有没做完的,为什么? 答:没有全部做完,到目前为止,我们的还有几个实验的报告生成功能没有上线.这几个实验的数据处理文件已经 ...
- 《linux内核设计与实现》第三章
1.进程 进程就是正在执行的程序代码的实时结果,不仅包含可执行代码,还包括其他资源,比如:打开的文件,挂起的信号,内核内部数据结构,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程 ...
- LINUX实践之模块
模块实践 --关于模块代码部分 ---首先是.c代码: 一定会用到的函数有这几个:module_init().module_exit().MODULE_LICENSE() 会用到的头文件:module ...
- 同步手绘板——json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...
- <<梦断代码>>阅读笔记二
这是第二篇读书笔记,这本书我已经读了有一大半了,感觉书中所描述的人都是疯子,一群有创造力,却又耐得住寂寞的疯子. 我从书中发现几点我比较感兴趣的内容. 第一个,乐高之梦.将程序用乐高积木一样拼接起来. ...
- 软件工程(四)数据流图DFD
结构化分析中,常用到数据模型为实体关系图,功能模型是数据流图 DFD 可以认为,一个基于计算机的信息处理系统由数据流和一系列的转换构成,这些转换将输入数据流变换为输出数据流.数据流图就是用来刻画数据流 ...