题解

一道概率与期望的状压题目

这种最优性的题目,我们一般都是倒着转移,因为它的选择是随机的所以我们无法判断从左还是从右更有,所以我们都搜一遍

时间一定会爆,采用记忆化搜索,一种状态的答案一定是固定的,所以可以记忆化

但是空间也会爆,当状态大于 \(2^{25}\) 次方时,我们选择使用一个 \(map\) ,小于时就用一个数组

对于数组,我们先打上标记,然后直接记忆化

注意,总的状态一定要在最高位再高一位设成 \(1\),因为 \(00000\) 和 \(000\) 不是一种状态,但是若不加,就会判成一种状态

Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=getchar();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
typedef double db;
map<int,db> dph;
db dps[1<<25];
int n,k,st,wnm;
char s[33];
int calc(int st,int cur) {
ri tmp=st>>cur,bc=st&((1<<cur-1)-1);
return tmp<<(cur-1)|bc;
}
db dfs(int st,int siz) {
if (siz==n-k) return 0.0;
if (siz>24&&dph.find(st)!=dph.end()) return dph[st];
if (siz<=24&&dps[st]!=-1.0) return dps[st];
register db res=0.0;
ri lm=siz>>1;
for (ri i(1);i<=lm;p(i)) {
ri tmp1=st>>i-1&1,tmp2=st>>siz-i&1;
ri st1=calc(st,i),st2=calc(st,siz-i+1);
res+=2.0*cmax(dfs(st1,siz-1)+(db)tmp1,dfs(st2,siz-1)+(db)tmp2)/siz;
}
if (siz&1) {
lm+=1;
ri tmp1=st>>lm-1&1,st1=calc(st,lm);
res+=(dfs(st1,siz-1)+(db)tmp1)/siz;
}
return siz>24?dph[st]=res:dps[st]=res;
}
inline int main() {
FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
for (ri i(0);i<1<<25;p(i)) dps[i]=-1.0;
read(n),read(k);
scanf("%s",s+1);
for (ri i(1);i<=n;p(i)) st|=(s[i]=='W')<<n-i,wnm+=(s[i]=='W');
st|=1<<n;
printf("%.10lf\n",dfs(st,n));
return 0;
}
}
int main() {return nanfeng::main();}

NOIP 模拟 $19\; \rm v$的更多相关文章

  1. NOIP 模拟 $19\; \rm w$

    题解 \(by\;zj\varphi\) 树形 \(dp\) 题目 有一个结论:对于一个图,有多少奇度数的点,处以二就是答案,奇度数指的是和它相连的边中被反转的是奇数 证明很好证 那么设 \(dp_{ ...

  2. NOIP 模拟 $19\; \rm u$

    题解 \(by\;zj\varphi\) 二维差分的题目 维护两个标记,一个向下传,一个向右下传: 对于每次更新,我们可以直接更新 \((r,c)+s,(r+l,c)-s\) ; \((r,c+1)- ...

  3. 7.19 NOIP模拟6

    这次考试又一次让mikufun认识到了常数的重要性 T1.那一天我们许下约定 这题一看到D<=1e12,想都没想,矩阵快速幂!然后飞快的码了一个,复杂度n^3logD,让后我观察了一下这个转移矩 ...

  4. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  5. 2021.5.22 noip模拟1

    这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...

  6. NOIP 模拟 $36\; \rm Cicada 拿衣服$

    题解 \(by\;zj\varphi\) 发现右端点固定时,左端点的 \(min-max\) 单调递减,且对于 \(or\) 和 \(and\) 相减,最多有 \(\rm2logn\)个不同的值,且相 ...

  7. NOIP 模拟 $22\; \rm e$

    题解 对于这个 \(abs\) 就是求大于 \(r\) 的最小值,小于 \(r\) 的最大值,建权值线段树或平衡树. 因为是 \(k\) 个点的联通块,就是求它们的 \(lca\) 到它们的链,可持久 ...

  8. NOIP 模拟 $16\; \rm Lost My Music$

    题解 \(by\;zj\varphi\) 一道凸包的题 设 \(\rm dep_u\) 表示节点 \(u\) 的深度,那么原式就可化为 \(-\frac{c_v-c_u}{dep_v-dep_u}\) ...

  9. NOIP模拟

    1.要选一个{1,2,...n}的子集使得假如a和b在所选集合里且(a+b)/2∈{1,2,...n}那么(a+b)/2也在所选集合里 f[i]=2*f[i-1]-f[i-2]+g[i] g[n]:选 ...

随机推荐

  1. 白话边缘计算解决方案 SuperEdge

    一.SuperEdge的定义 引用下SuperEdge开源官网的定义: SuperEdge is an open source container management system for edge ...

  2. Acunetix与WAF集成:Acunetix和F5 BigIP ASM

    该的Acunetix API让您有机会来实现任务自动化,从而提高效率-尤其是当你可以用加速您的工作流程的其他组件的功能整合.在此示例中,我们将在上一篇文章的基础上,向您展示如何在Bash脚本中使用Ac ...

  3. 两个字符串,s1 包含 s2,包含多次,返回每一个匹配到的索引---python

    #两个字符串,s1 包含 s2,包含多次,返回每一个匹配到的索引 def findSubIndex(str1,subStr): str_len = len(str1) sub_len = len(su ...

  4. 20道Java实习生笔试面试选择题(内附答案解析)

    ​1.以下对继承的描述错误的是(A) A.Java中的继承允许一个子类继承多个父类 B.父类更具有通用性,子类更具体 C.Java中的继承存在的传递性 D.当实例化子类时会递归调用父类中的构造方法 解 ...

  5. Spring学习总结(一)---谈谈对Spring IOC的理解(一:理论知识理解)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  6. STM32笔记三

    1.单片机有两种存储器,程序存储器用来存储编写的程序,数据存储器用来存储单片机工作时的临时数据.内部存储器分为工作寄存器区.位寻址区.数据缓存区和特殊功能寄存器区. 2.位:数据存储的最小单位.在计算 ...

  7. spring boot框架相关知识

    1.spring:一个轻量级的控制反转和面向切面的容器,专业的开发Web项目的开源框架.    spring mvc:是基于spring的mvc框架,属于一个企业WEB开发的MVC框架,涵盖面包括前端 ...

  8. 【网络IO系列】IO的五种模型,BIO、NIO、AIO、IO多路复用、 信号驱动IO

    前言 在上一篇文章中,我们了解了操作系统中内核程序和用户程序之间的区别和联系,还提到了内核空间和用户空间,当我们需要读取一条数据的时候,首先需要发请求告诉内核,我需要什么数据,等内核准备好数据之后 , ...

  9. Abp太重了?轻量化Abp框架

    本文首发于个人博客(https://blog.zhangchi.fun/) 在进行框架的选型时,经常会听到"***框架太重了"之类的声音,比如"Abp太重了,不适合我们. ...

  10. Redis学习——简介

    一.Redis简介 Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).hash(哈希).list(列表). ...