博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu_3239 [HNOI2015]亚瑟王
阅读量:7112 次
发布时间:2019-06-28

本文共 1115 字,大约阅读时间需要 3 分钟。

Luogu_3239 [HNOI2015]亚瑟王

vim-markdown 真好用

这个题难了我一下午

第一道概率正而八经\(DP\),还是通过qbxt讲解才会做的。

发现真是个dalao。讲的真是很清楚。代码也比较干净

做题心得:

1.概率和期望联系紧密。若无法直接计算期望,可是用期望的性质,将问题转化为算概率
2.若目标概率无法直接计算,可以通过计算过程中的某个步骤的概率,间接的计算出目标概率

若跟据局面进行状压\(DP\),时间复杂度成熟不起。

考虑优化状态。

发现,对于某一张牌,我们只要知道他用没有用过就行了。

所以一个很重要的操作就是定序。

我们只需要枚举某一张牌。在某一个局面中是否会被选中就可以了。

根据某一个局面出现的概率,便可计算出某一张牌在某个局面被选的概率,从而推出期望。

那么问题就是推出这个局面出现的概率。也就是过程中某个步骤的概率。

我们可以更改一下决策, 我们只需要枚举在某一个局面中。要么在剩余j轮(也就是当前局面)的时候被选中,要么在永远不会被选中

然后直接转移到决策下一张卡。

这样做, 我们可以避免同一张卡之间不同决策之间的互相影响, 又可以不丢失任何答案。


\(f_{i,j}\)为前\(i\)张卡牌已经决策完了,还剩下\(j\)局可以进行

根据上面的说明,便可以写出状态转移方程

\(f_{i,j}=f_{i-1,j}*(1-p_i)^j+f_{i-1,j+1}*(1-(1-p_i)^{j+1})\)

#include 
#include
#include
#include
#include
#include
using std::bitset;const int maxn=101000;const int MAX=100000;const long long mod=1000000001;const int log_2=17;const int log_3=11;int n;long long map[log_2][300];int check[log_2][log_3];int Log_2,Log_3;int len[log_2];int step[maxn],tot;bitset
vis;void init(){ for(int i=0;i<(1<

转载于:https://www.cnblogs.com/Lance1ot/p/10385837.html

你可能感兴趣的文章
工具箱 - Xshell <2>
查看>>
使用bootstrap和metroui设计的微网站或手机app界面
查看>>
使用GLSL实现更多数量的局部光照 【转】
查看>>
Linux下使用popen()执行shell命令
查看>>
可压Navier-Stokes方程组的爆破现象
查看>>
rundll32命令大全
查看>>
OC 内存管理-02 autorelease 概念 以及用法
查看>>
IPC——匿名管道
查看>>
AsyncSocket长连接棒包装问题解决
查看>>
二叉树的非递归先序,中序,后序遍历
查看>>
vi/vim实用命令
查看>>
Ubuntu中Nginx的安装与配置
查看>>
《资本论》读书笔记(1)谁偷了我的奶酪
查看>>
ReactJS实践(一)—— FrozenUI React化之Loading组件
查看>>
jquery easyUI中combobox的使用总结
查看>>
javascript closure
查看>>
移动WEB问题小结
查看>>
ios调用dismissViewController的一个小陷阱
查看>>
[Android Pro] static 和 Volatile 的区别
查看>>
深入理解PHP内核(八)变量及数据类型-预定义变量
查看>>