Luogu_3239 [HNOI2015]亚瑟王
Luogu_3239 [HNOI2015]亚瑟王
vim-markdown 真好用
这个题难了我一下午
第一道概率正而八经\(DP\),还是通过qbxt讲解才会做的。
发现Sengxian真是个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 <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <bitset>
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<maxn>vis;
void init()
{
for(int i=0;i<(1<<log_3);i++)
if((i&(i<<1))==0)
step[++tot]=i;
return ;
}
double Log(int base,int val)
{
return log(val)/log(base);
}
long long calc(int limte)
{
memset(map,0,sizeof(map));
memset(check,0,sizeof(check));
memset(len,0,sizeof(len));
int wide=0;
for(int &i=wide,pas1=limte;i<=Log_2&&pas1<=n;i++,pas1<<=1)
for(int j=0,pas2=pas1;j<=Log_3&&pas2<=n;j++,pas2*=3)
{
check[i][j]=pas2,len[i]|=(1<<j);
vis[pas2]=1;
}
wide-=1;
for(int i=1;step[i]<=len[0]&&i<=tot;i++)
map[0][i]=1;
for(int i=0;i<wide;i++)
for(int j=1;step[j]<=len[i]&&j<=tot;j++)
for(int k=1;step[k]<=len[i+1]&&k<=tot;k++)
if((step[j]&step[k])==0)
map[i+1][k]=(map[i][j]+map[i+1][k])%mod;
long long ans=0;
for(int i=0;step[i]<=len[wide];i++)
ans=(ans+map[wide][i])%mod;
return ans;
}
int main()
{
init();
scanf("%d",&n);
Log_2=Log(2,n);Log_3=Log(3,n);
long long ans=1;
for(int i=1;i<=n;i++)
if(!vis[i])
ans=(ans*calc(i))%mod;
printf("%lld",ans);
}
Luogu_3239 [HNOI2015]亚瑟王的更多相关文章
- 【BZOJ4008】[HNOI2015]亚瑟王 期望
[BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
- BZOJ 4008: [HNOI2015]亚瑟王( dp )
dp(i, j)表示考虑了前i张牌, 然后还有j轮的概率. 考虑第i+1张牌: 发动的概率 : p = dp(i, j) * (1 - (1-p[i+1])^j) 没发动的概率 : dp(i, j) ...
- 【BZOJ4008】[HNOI2015]亚瑟王(动态规划)
[BZOJ4008][HNOI2015]亚瑟王(动态规划) 题面 BZOJ 洛谷 题解 设\(f[i][j]\)表示前\(i\)张卡中有\(j\)张被触发的概率. 分两种情况转移,即当前这张是否被触发 ...
- [洛谷 P3239] [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知, ...
- 4008: [HNOI2015]亚瑟王
4008: [HNOI2015]亚瑟王 链接 分析: 根据期望的线性性,直接求出每张牌出现的概率,最后乘以攻击力就是答案. 每张牌出现的概率只与它前面的牌有关,与后面的没有关系,于是按顺序考虑每张牌. ...
- 【BZOJ4008】[HNOI2015]亚瑟王
[BZOJ4008][HNOI2015]亚瑟王 题面 bzoj 洛谷 题解 由期望的线性性 可以知道,把所有牌打出的概率乘上它的伤害加起来就是答案 记第$i$张牌打出的概率为$fp[i]$ 则 $$ ...
- bzoj[HNOI2015]亚瑟王 - 递推与动规 - 概率与期望
[bzoj4008][HNOI2015]亚瑟王 2015年4月22日3,2991 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之 ...
- 概率DP——BZOJ4008 [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 ...
- Bzoj4008 [HNOI2015]亚瑟王
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Submit: 1009 Solved: 605[Submit][Status] ...
随机推荐
- 为什么要学习 UML?
UML 的首要价值是沟通和理解.好的图形可以帮助沟通设计思想,尤其是要回避许多细节时,图形也可以帮助你理解软件系统或业务流程.作为团队的成员,尝试弄清楚某些东西时,图形有助于理解和沟通整个团队所理解到 ...
- Win10环境下Redis和Redis desktop manager 安装
1.Redis的下载地址: https://github.com/MicrosoftArchive/redis/releases/download/win-3.2.100/Redis-x64-3.2. ...
- Jquery中动态生成的元素没有点击事件或者只有一次点击事件
今天用jq做动态生成的元素的click事件时,click只执行了一次,当然有些朋友可能根本没执行, 执行了一次的原因是因为可能有函数加载了一遍,一次都没执行的可能是没绑定对象或者jq版本问题, 动态生 ...
- BZOJ4513: [Sdoi2016]储能表(数位dp)
题意 题目链接 Sol 一点思路都没有,只会暴力,没想到标算是数位dp??Orz 首先答案可以分成两部分来统计 设 \[ f_{i,j}= \begin{aligned} i\oplus j & ...
- sublime3下载安装及常用插件、浏览器预览设置
之前与学习前端有关的软件都安装在了实验室电脑上,最近由于要放寒假(也许我寒假回去会学习呢),于是得在笔记本电脑上重新安装一遍.几个软件各种出错,花了一下午才安装好,必须记录下来啊! 这篇文章主要介绍s ...
- redux、immutablejs和mobx性能对比(三)
四.我的结论 通过第三部分的数据数据分析,我觉得我们可以得到以下结论: 无论是在开发环境还是测试环下页面的首次加载速度结果都是:redux>immutablejs>mobx,但是他们之间的 ...
- hololens DEP2220: 无法删除目标计算机“127.0.0.1”上的文件夹
Hololens开发调试的过程中,可能会出现 “DEP2220: 无法删除目标计算机“127.0.0.1”上的文件夹“ 的错误导致无法部署,解决办法是进入项目属性页——调试——启动选项,勾选“卸载并重 ...
- 学习ssm心得
学习是一个探索的过程,在我编程能力提高的阶段中,我发现在编写代码之前,必须得弄清代码的逻辑,我到底要干什么,从哪一步做起.端与端之间该怎么衔接. 先把问题想清楚,再去编写.不要急着去乱敲一通,一点用处 ...
- Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程
Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程 看了好多人的博客,有的不全 or 有问题,整理了一下,适合小白 新手先整理几个小问题 1.为啥使用 Linux 搭建服务器? ...
- 8.Bootstrap CSS编码规范
Bootstrap CSS编码规范 本节的介绍内容为 Bootstrap 中的 CSS 编码规范. 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 为选择 ...