题目链接

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求期望相关推荐

  1. BZOJ2246 SDOI2011 迷宫探险(状压+概率dp)

    题面太长了,贴起来好麻烦,走链接吧: P2489 [SDOI2011]迷宫探险 题目指向状压.自然地考虑用二进制表示状态,0为无害,1为有害.紧接着会发现,当我们走到某个点 ( x, y ) 时,我们 ...

  2. [BZOJ2246][SDOI2011]迷宫探险(状压概率DP)

    1.DP模型 用33进制数表示陷阱的状态,00表示无害,11表示有害,22表示未知.可建立DP模型: f[x][y][S][h]f[x][y][S][h]表示从(x,y)(x,y)开始,当前陷阱的状态 ...

  3. HDU 4336 Card Collector(状压 + 概率DP 期望)题解

    题意:每包干脆面可能开出卡或者什么都没有,一共n种卡,每种卡每包爆率pi,问收齐n种卡的期望 思路:期望求解公式为:$E(x) = \sum_{i=1}^{k}pi * xi + (1 - \sum_ ...

  4. HDU4405(概率DP求期望)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:飞行棋,从0到n,置骰子,置到几就往前走几步,前进中会有捷径,比如2和5连到一起了,那你走到2 ...

  5. LightOJ 1030 【概率DP求期望】

    借鉴自:https://www.cnblogs.com/keyboarder-zsq/p/6216762.html 题意:n个格子,每个格子有一个值.从1开始,每次扔6个面的骰子,扔出几点就往前几步, ...

  6. bzoj 1076 奖励关 状压+期望dp

    因为每次选择都是有后效性的,直接dp肯定不行,所以需要逆推. f[i][j]表示从第i次开始,初始状态为j的期望收益 #include<cstdio> #include<cstrin ...

  7. Check the difficulty of problems (概率dp求概率)

    Check the difficulty of problems POJ - 2151 大致题意: m个问题,t个队伍,要求冠军队伍至少解决n个问题,给出每个队伍解决每个问题的概率 求每一个队至少解决 ...

  8. 动态规划 —— 概率 DP 与期望 DP

    [概述] 由于概率和期望具有线性性质,使得可以在概率和期望之间建立一定的递推关系,这样就可以通过动态规划来解决一些概率问题,例如概率和期望的最值问题就常常使用概率 DP.期望 DP 来解决. 与其他的 ...

  9. bzoj4565 [HAOI2016]字符合并 结论+状压+区间dp

    如果k==2的话就是记搜, 但这个题用记搜的思路的话是需要枚举k个断点的, 所以对于枚举断点,就很可能有优化,比如到一个断点,一个决策的最优值 于是考虑区间dp模型,相当于是插入一个数,然后看影响. ...

最新文章

  1. 第九届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
  2. Java竞选组长发言_竞选组长的发言稿_450字
  3. 2019计算机科学与技术调剂信息,福建师范大学计算机科学与技术2019考研调剂信息...
  4. win10系统上Python和pycharm的安装及配置
  5. caffe将图像数据转换成lmdb文件
  6. 概要设计说明书模板_实验报告的书写案例word模板
  7. 为qt程序添加ico图标
  8. Java基于spingboot+vue智慧小区物业管理系统源码 智慧小区管理系统源码
  9. 神舟计算机主板bios,神舟笔记本BIOS设置详解
  10. 疯狂Java讲义(六)----第三部分
  11. 【业务安全-04】万能用户名及万能密码实验
  12. Mysql常用技巧总结
  13. 《考研公共课复习指导》数学篇1:考研数学策略
  14. 创始人李卉:麦客CRM2.0核心逻辑及其背后的思考
  15. 餐厅收银系统|基于SSM实现餐厅收银系统
  16. ESD二极管各项参数字母的解释-优恩
  17. unity PC端 调用FFmpeg生成视频 unity序列帧合成视频
  18. html超链接1003无标题,爱特漫画1003无标题
  19. 李晓慧:如何利用MongoDB打造爆款小程序
  20. python简历项目经验怎么写_个人简历中工作经验怎么写?

热门文章

  1. Graph Correspondence Transfer for Person Re-Identification论文笔记
  2. 语言可读性可写性_如果您想谈论可访问性,那么我们需要谈论可读性问题。
  3. adobexd怎么录屏_Adobe XD 入门教程-如何在 Adobe XD 中创建交互式原型?
  4. 【ICPC】2022 昆明站 B题 题解
  5. HTML 表格table tr td、表头标题、表结构、合并单元格
  6. This dependency was not found: * common/stylus/index.styl in ./src/main.js To install it, you can ru
  7. 漫谈高数(二) 方程和矩阵的物理含义
  8. [近似算法] NP-hard 问题求解
  9. 数据库导入到hive中出现Can't open file: './mxw20_g107/log_action.frm' (errno: 24 - Too many open files)
  10. (附源码)springboot身体健康问诊信息系统 毕业设计181049