首页 > 其他分享 >bzoj 2554 Color 期望DP

bzoj 2554 Color 期望DP

时间:2023-01-14 21:57:00浏览次数:48  
标签:frac Color 期望 int 黑球 白球 2554 include DP

期望DP

枚举最终能成为哪个颜色,把这个颜色看做白球,其余颜色看成黑球。最后分别把每种颜色的期望加起来就行。

考虑当前有i个白球,全变成白球期望步数设为f[i]

一次操作可能造成有白球变黑或者黑球变白的概率:\(\frac{i(n-i)}{C^2_n}\),也就是期望\(\frac{C^2_n}{i(n-i)}\)次操作会造成有白球变黑或者黑球变白。

很容易写错成

\(f[i]=\frac{C^2_n}{i(n-i)}+\frac{1}{2}∗f[i−1]+\frac{1}{2}∗f[i+1]\)

为什么是错的?你考虑一下f[1],能从f[0]转移来吗?不行的,f[0]没意义。

所以我们重新考虑f,f[i]应该是当前有i个白球,在能全变成白球条件下,全变成白球期望步数

设当前有i个白球,最终能全变成白球的概率是什么?设为g[i],每次操作等概率减少或增加白球,可知\(g[i]=\frac{1}{2}g[i-1]+\frac{1}{2}g[i+1]\)

且有\(g[0]=0\) 和 \(g[1]=1\)可知是等差数列,\(g[i]=\frac{i}{n}\)

那么f[i]按照g[i-1]和g[i+1]的比例来确定f[i-1]和f[i+1]前的系数,并且要注意这俩系数和为1

可得\(f[i]=\frac{C^2_n}{i(n-i)}+\frac{(i−1)}{2i}∗f[i−1]+\frac{i+1}{2i}∗f[i+1]\)

这个方程很特殊,可以O(n)消元解方程

#include<iostream>
#include<cstring>
#include<cstdio>
#define DB double
using namespace std;
int n;
DB ans;
const int N=10010;
int tong[30];
DB f[N],c[N][5];
char s[N];
int main()
{
	scanf("%s",s+1);n=strlen(s+1);
	for(int i=1;i<=n;++i)++tong[s[i]-'A'+1];
	for(int i=1;i<=n;++i)
	{
		if(i!=1&&i!=n)c[i][1]=-1.0*(i-1)/(2*i);
		c[i][2]=1;
		if(i!=n)c[i][3]=-1.0*(i+1)/(2*i);
		if(i!=n)c[i][4]=((1.0*n*n-n)/2.0)/(1.0*i*(n-i));
	}
	for(int i=2;i<=n;++i)
	{
		double bei=c[i][1]/c[i-1][2];
		c[i][1]=0;c[i][2]-=c[i-1][3]*bei;
		c[i][4]-=c[i-1][4]*bei;
	}
	for(int i=n-1;i>=1;--i)
	{
		double bei=c[i][3]/c[i+1][2];
		c[i][3]=0;
		c[i][4]-=c[i+1][4]*bei;
	}
	
	for(int i=1;i<=n;++i)c[i][4]/=c[i][2];
	for(int i=1;i<=26;++i)ans+=(DB)tong[i]/n*c[tong[i]][4];
	printf("%0.1f",ans);
	return 0;
}

标签:frac,Color,期望,int,黑球,白球,2554,include,DP
From: https://www.cnblogs.com/wljss/p/17052571.html

相关文章

  • 计数 dp 目录
    数え上げテクニック集笔记。引言OI中有三大专题:dp,数据结构,图论。而在这三大专题中,因为dp是从小问题的解法上升至大问题的解法的关键;所以dp,在这三大专题中,优先性是......
  • 动态dp
    两天时间学习了动态dp。题目洛谷P4719首先我们假设如果它是普通dp。设计状态\(f[i][0/1]\)表示以\(i\)为根的子树中选或不选\(i\)结点的最大独立集的值。状态转移\(f[......
  • Luogu7509 撕裂消除 - 期望dp -
    题目链接:https://www.luogu.com.cn/problem/P7509题解:设\(dp[i][j][0/1]\)表示考虑到第\(i\)个位置,已经形成了极大的\(j\)段,当前位置为0/1的期望值;\(g[i][j][0......
  • 通过tcpdump抓取lldp/cdp报文判断服务器上联网络配置
    在一般运维工作中,时常要检查服务器的网络配置,例如服务器有几个网卡,有没有做绑定,上联网络情况等。一般可以从以下几个方面判断:查看布线表查看CMDB搜索相关信息通过上行交换机......
  • 动态规划笔记(一):初识DP
    动态规划(DP)DP问题特征特征:重叠子问题、最优子结构、无后效性重叠子问题:计算大问题需要重复计算小问题,DP可以避免重复计算,代价是消耗更多的空间最优子结构:大问题的最优......
  • DP7361 是一款立体声六通道线性输出的数模转换器-兼容CS4361
    DP7361是一款立体声六通道线性输出的数模转换器,内含插值滤波器、Multi-Bit数模转换器、模拟输出滤波器,支持主流的音频数据格式。DP7361片上集成线性低通模拟滤波器和四......
  • 【luogu CF1707D】Partial Virtual Trees(容斥)(DP)
    PartialVirtualTrees题目链接:luoguCF1707D题目大意给你一棵以1为根的数,问你对于每个长度,有多少个点集序列,第一个点集是全部点,最后一个点集只有1号点,且中间每个点......
  • Educational Codeforces Round 110 C(最长连续字串,dp),D(左右子树继承贡献dp)
    C.UnstableString题目大意:给定一个长度为n的字符串且只包括'0','1','?',其中如果一个字串是由01交替组成的则称谓不稳定的,如果碰到'?'则可以将其转化为0/1,求不稳定的......
  • DPDK入门实践2——编译安装与helloworld
    要想弄懂一个工程,在了解完它的基本概念和大体架构之后,就让它跑起来。看看是怎么玩转的,然后再深入细节。这里我先到GitHub上下载dpdk工程的18.11.2稳定版本,之所以选择这个版......
  • dpdk入门实践4--IGB_UIO、VFIO和KNI三大模块
    模块安装运行dpdk源文件(以18.11.2版本为例)中usertools/dpdk-setup.sh脚本可以选择如下选项18、19、20分别加载IGB_UIO、VFIO或者KNI模块。要能加载成功首先要编译安装好......