P2473 奖励关 状压概率DP求期望
题目链接
https://www.luogu.com.cn/problem/P2473
题意
n轮,m种球,每轮随即一个球,可以接可以不接,接的话需要满足这个球的前置条件(比如3号球接球必须已经接过1,4号这种),然后获得一定分数(可负)。问最佳策略下期望得分
思路
练了这点DP总算有点眉目了。
求期望,并且发现我们前面的操作是有后效性的(我们需要作出吃负分,更新状态的不贪心操作),我们考虑倒推
显然我们需要记录当前状态以判断是否能接某个球,考虑状态压缩,某位置为1代表接到过这种球,对于只需要考虑是否接过球的本题足够了。
定义DP[i][j]为i轮开始时,j状态下还可以获得的分值期望,那么初始状态就是DP[n+1][]为0,第n轮结束后不可以再获得了。答案就是DP[1][0],初始轮次没接过球还能获得的分数期望就是总的分数期望
倒退考虑转移,DP[i][j]显然都是从DP[i+1]推来的,我们枚举m种抛球情况,每种等概率
- 对于无法接到的情况,显然期望不变,状态也不变。直接加上DP[i+1][j]/m
- 对于能接到的情况,我们对DP[i+1][j]和DP[i+1][w]+value(w为接球后状态)取一个max再除m加上即可
至于判断能否接到,我们对于每种球处理一个接到的状态(3号球接1,4,那就是1001),如果可接状态和当前状态求按位与结果和可接一致,那么就是可以接到。
至于上文说的转移的新状态w,就在当前状态对应接球位按位或一个1即可。
代码
#include<cstdio>
#include<iostream>
#include<iomanip>
#include<map>
#include<unordered_map>
#include<string>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<chrono>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl "\n"
//#define int long long
//#define double long double
using namespace std;typedef long long ll;const int maxn=40005;const int maxm=105;const int inf=0x3f3f3f3f;int n,m,k;double dp[maxm][maxn];int wuhu[maxm];int v[maxm];bool check(int a,int b){if((a&wuhu[b])==wuhu[b]) return 1;return 0;}signed main(){IOS#ifndef ONLINE_JUDGEfreopen("IO\\in.txt","r",stdin);freopen("IO\\out.txt","w",stdout);#endifint tn=1;cin>>n>>m;for(int i=1;i<=m;i++){cin>>v[i];int t;while(cin>>t&&t){wuhu[i]=(wuhu[i]|(1<<(t-1)));}}for(int i=n;i;i--){for(int j=0;j<(1<<m);j++){for(int w=1;w<=m;w++){//可以转移,期望+v//不能转移,直接期望if(check(j,w))dp[i][j]+=max(dp[i+1][j],dp[i+1][j|(1<<(w-1))]+v[w]);else dp[i][j]+=dp[i+1][j];}dp[i][j]/=m;}}cout<<fixed<<setprecision(6)<<dp[1][0]<<endl;}
P2473 奖励关 状压概率DP求期望相关推荐
- BZOJ2246 SDOI2011 迷宫探险(状压+概率dp)
题面太长了,贴起来好麻烦,走链接吧: P2489 [SDOI2011]迷宫探险 题目指向状压.自然地考虑用二进制表示状态,0为无害,1为有害.紧接着会发现,当我们走到某个点 ( x, y ) 时,我们 ...
- [BZOJ2246][SDOI2011]迷宫探险(状压概率DP)
1.DP模型 用33进制数表示陷阱的状态,00表示无害,11表示有害,22表示未知.可建立DP模型: f[x][y][S][h]f[x][y][S][h]表示从(x,y)(x,y)开始,当前陷阱的状态 ...
- HDU 4336 Card Collector(状压 + 概率DP 期望)题解
题意:每包干脆面可能开出卡或者什么都没有,一共n种卡,每种卡每包爆率pi,问收齐n种卡的期望 思路:期望求解公式为:$E(x) = \sum_{i=1}^{k}pi * xi + (1 - \sum_ ...
- HDU4405(概率DP求期望)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:飞行棋,从0到n,置骰子,置到几就往前走几步,前进中会有捷径,比如2和5连到一起了,那你走到2 ...
- LightOJ 1030 【概率DP求期望】
借鉴自:https://www.cnblogs.com/keyboarder-zsq/p/6216762.html 题意:n个格子,每个格子有一个值.从1开始,每次扔6个面的骰子,扔出几点就往前几步, ...
- bzoj 1076 奖励关 状压+期望dp
因为每次选择都是有后效性的,直接dp肯定不行,所以需要逆推. f[i][j]表示从第i次开始,初始状态为j的期望收益 #include<cstdio> #include<cstrin ...
- Check the difficulty of problems (概率dp求概率)
Check the difficulty of problems POJ - 2151 大致题意: m个问题,t个队伍,要求冠军队伍至少解决n个问题,给出每个队伍解决每个问题的概率 求每一个队至少解决 ...
- 动态规划 —— 概率 DP 与期望 DP
[概述] 由于概率和期望具有线性性质,使得可以在概率和期望之间建立一定的递推关系,这样就可以通过动态规划来解决一些概率问题,例如概率和期望的最值问题就常常使用概率 DP.期望 DP 来解决. 与其他的 ...
- bzoj4565 [HAOI2016]字符合并 结论+状压+区间dp
如果k==2的话就是记搜, 但这个题用记搜的思路的话是需要枚举k个断点的, 所以对于枚举断点,就很可能有优化,比如到一个断点,一个决策的最优值 于是考虑区间dp模型,相当于是插入一个数,然后看影响. ...
最新文章
- 第九届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
- Java竞选组长发言_竞选组长的发言稿_450字
- 2019计算机科学与技术调剂信息,福建师范大学计算机科学与技术2019考研调剂信息...
- win10系统上Python和pycharm的安装及配置
- caffe将图像数据转换成lmdb文件
- 概要设计说明书模板_实验报告的书写案例word模板
- 为qt程序添加ico图标
- Java基于spingboot+vue智慧小区物业管理系统源码 智慧小区管理系统源码
- 神舟计算机主板bios,神舟笔记本BIOS设置详解
- 疯狂Java讲义(六)----第三部分
- 【业务安全-04】万能用户名及万能密码实验
- Mysql常用技巧总结
- 《考研公共课复习指导》数学篇1:考研数学策略
- 创始人李卉:麦客CRM2.0核心逻辑及其背后的思考
- 餐厅收银系统|基于SSM实现餐厅收银系统
- ESD二极管各项参数字母的解释-优恩
- unity PC端 调用FFmpeg生成视频 unity序列帧合成视频
- html超链接1003无标题,爱特漫画1003无标题
- 李晓慧:如何利用MongoDB打造爆款小程序
- python简历项目经验怎么写_个人简历中工作经验怎么写?
热门文章
- Graph Correspondence Transfer for Person Re-Identification论文笔记
- 语言可读性可写性_如果您想谈论可访问性,那么我们需要谈论可读性问题。
- adobexd怎么录屏_Adobe XD 入门教程-如何在 Adobe XD 中创建交互式原型?
- 【ICPC】2022 昆明站 B题 题解
- HTML 表格table tr td、表头标题、表结构、合并单元格
- This dependency was not found: * common/stylus/index.styl in ./src/main.js To install it, you can ru
- 漫谈高数(二) 方程和矩阵的物理含义
- [近似算法] NP-hard 问题求解
- 数据库导入到hive中出现Can't open file: './mxw20_g107/log_action.frm' (errno: 24 - Too many open files)
- (附源码)springboot身体健康问诊信息系统 毕业设计181049