首页 > 其他分享 >概率/期望dp刷题整理

概率/期望dp刷题整理

时间:2023-07-06 22:45:48浏览次数:46  
标签:1.0 v1 int 黑鼠 v3 期望 dp 刷题

Bag of mice

题意:有w只白鼠和b只黑鼠,公主和龙轮流抓老鼠,其中龙每抓一只老鼠就会有一只未被抓住的老鼠逃走,先抓到一只白鼠的获胜,问公主获胜的概率是多少

Solution

令dp[i][j]表示还剩i只白鼠和j只黑鼠时公主获胜的概率

如果公主直接抓住一只白鼠,获胜的概率是

\[\frac{i}{i+j} \]

如果公主先抓住的是黑鼠,龙抓住的是黑鼠,漏掉了一只白鼠的概率是

\[\frac{j}{i+j}\cdot\frac{j-1}{i+j-1}\cdot\frac{i}{i+j-2} \]

如果公主先抓住的是黑鼠,龙抓住的是黑鼠,漏掉了一只黑鼠的概率是

\[\frac{j}{i+j}\cdot\frac{j-1}{i+j-1}\cdot\frac{j-2}{i+j-2} \]

转移的时候从下往上转移即可

double dp[1005][1005];
void solve()
{
	int n,m;cin>>n>>m;
	for(int i=1;i<=m;i++)dp[0][i]=0;
	for(int i=1;i<=n;i++)dp[i][0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			dp[i][j]=(i*1.0)/(i+j);
			if(j>2)dp[i][j]+=(j*1.0)/(i+j)*(j-1.0)/(i+j-1.0)*(j-2.0)/(i+j-2.0)*dp[i][j-3];
			if(j>1&&i>0)dp[i][j]+=(j*1.0)/(i+j)*(j-1.0)/(i+j-1.0)*(i*1.0)/(i+j-2.0)*dp[i-1][j-2];
		}
	}
	cout<<fixed<<setprecision(9)<<dp[n][m]<<"\n";
}

换教室

题意:有2n个课程,在一条的时间段上有n个时间点,其中每一个时间点会有2个内容相同但是开课地点不同的课程,有m次修改课程机会,修改是有概率成功的,问期望的花费路程最小值是多少

Solution

令dp[i][j][0/1]表示当前是第i个课程/时间点,包括当前这个已经用了j次修改,当前修改或者不修改课程的期望路程花费

那么dp[i][j][0]可以从dp[i-1][j][0]和dp[i-1][j][1]转移过来,同理dp[i][j][1]可以从dp[i-1][j-1][0]和dp[i-1][j-1][1]转移过来

用floyd把最短路程给处理出来,记得要把自己到自己的路程在floyd后变为0

void solve()
{
	int n,m,v,e;cin>>n>>m>>v>>e;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=m;j++)
		{
			dp[i][j][0]=dp[i][j][1]=1e9;
		}
	}
	for(int i=1;i<=v;i++)
	{
		for(int j=1;j<=v;j++)
		{
			f[i][j]=f[j][i]=1e9;
		}
	}
	for(int i=1;i<=n;i++)cin>>v1[i];
	for(int i=1;i<=n;i++)cin>>v2[i];
	for(int i=1;i<=n;i++)cin>>v3[i];
	for(int i=1;i<=e;i++)
	{
		int x,y,z;cin>>x>>y>>z;
		f[x][y]=min(z,f[x][y]);
		f[y][x]=min(z,f[y][x]);
	}
	for(int k=1;k<=v;k++)
	{
		for(int i=1;i<=v;i++)
		{
			for(int j=1;j<i;j++)
			{
				if(f[i][j]>f[i][k]+f[k][j])f[i][j]=f[j][i]=f[i][k]+f[k][j];
			}
		}
	}
	for(int i=1;i<=v;i++)f[i][i]=0;
	dp[1][0][0]=dp[1][1][1]=0.0;
	for(int i=2;i<=n;i++)
	{
		for(int j=0;j<=min(i,m);j++)
		{
			dp[i][j][0]=min(dp[i-1][j][0]*1.0+f[v1[i-1]][v1[i]],dp[i-1][j][1]+f[v2[i-1]][v1[i]]*v3[i-1]+f[v1[i-1]][v1[i]]*(1-v3[i-1]));
			//cout<<dp[i-1][j][1]<<" "<<f[v2[i-1]][v1[i]]*v3[i-1]<<" "<<f[v1[i-1]][v1[i]]*(1-v3[i-1])<<"\n";
			if(j>0)
			{
				dp[i][j][1]=min(dp[i-1][j-1][0]+f[v1[i-1]][v2[i]]*v3[i]+f[v1[i-1]][v1[i]]*(1.0-v3[i]),dp[i-1][j-1][1]+f[v1[i-1]][v1[i]]*(1.0-v3[i-1])*(1.0-v3[i])+f[v1[i-1]][v2[i]]*v3[i]*(1.0-v3[i-1])+f[v2[i-1]][v1[i]]*v3[i-1]*(1.0-v3[i])+f[v2[i-1]][v2[i]]*v3[i-1]*v3[i]);
			}
			//cout<<dp[i][j][0]<<" "<<dp[i][j][1]<<"\n";
		}
	}
	double ans=1e9;
	for(int i=0;i<=m;i++)ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
	cout<<fixed<<setprecision(2)<<ans<<"\n";
	
}

标签:1.0,v1,int,黑鼠,v3,期望,dp,刷题
From: https://www.cnblogs.com/HikariFears/p/17533533.html

相关文章

  • 230706 // 换根 DP 复习
    菌:园什是我笋子元首:我是你打野我:元首耳朵得治G.求树的重心http://222.180.160.110:1024/contest/3744/problem/7我们知道,重心的定义是,将其切除后,每个连通块的大小不超过\(\dfracn2\)。连通块分为其子树和整棵树减去该结点引导的子树,所以我们记录size,在每次搜索结束后......
  • ctfshow刷题(Java反序列化)
    CTFshowJava反序列化web846urldns链importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.ObjectOutput;importjava.io.ObjectOutputStream;importjava.lang.reflect.Field;importjava.net.URL;importjava.util.Base64;i......
  • package com.ws.byd.bmgl.bmzdpz:编码字典------bydobject
    controller:packagecom.ws.byd.bmgl.bmzdpz.controller;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.lang.O......
  • [Typescript] OverloadedReturnType & OverloadedParameters
    typeOverloadedReturnType<T>=Textends{(...args:any[]):inferR;(...args:any[]):inferR;(...args:any[]):inferR;(...args:any[]):inferR}?R:Textends{(...args:any[]):inferR;(...args:any[]):inferR;(...args:any......
  • WordPress主题,当前页面使用了哪个template模板文件?
    对于页面与模板的对应情况一般都是能确定的,不过新朋友一时不熟悉可能还是需要花一点时间。其实,可以有一个小技巧,可以快速确定当前页面对应的模板文件。想要实现上面的效果,只需将下面代码加入主题的 functions.php 文件。functionzhuige_admin_bar_init(){//Ifnota......
  • DP 优化
    1.单调队列优化DP1.1简介当一个选手比你小还比你强,你就打不过他了。这是对单调队列简单形象的概括。单调队列在转移的过程中不断排除不可能成为决策点的元素,使每次转移寻找决策点的时间复杂度降为\(O(1)\)。一般地,可被单调队列优化的转移式可被写为如下形式:\[F_i=\max_{l_......
  • DP优化
    优化DP笔记P6040「ACOI2020」课后期末考试滑溜滑溜补习班设\(f_i\)表示老师解决到第\(i\)个学生需要最少的精力,答案显然是\(f_n\)边界:对于\(i=1\),\(f_1=a_1\)对于其他的\(i\)号学生,我们假设老师是从第\(j\)位学生过来的,所以状态转移方程分为三项\(f_j\)......
  • UDP 编程不能太随意
    UDP相比TCP虽然是是无连接的,看似发送接收都很随意,但是在发送——接收过程中,仍然有些问题需要重视。在整个通讯过程中至少有两点需要注意,一方面要防止发送方的一厢情愿,另一方面是在允许的条件下,尽量保证数据的完整性。防止发送方的一厢情愿是指在发送时要确保对方有套接字可以......
  • 【笔试实战】LeetCode题单刷题-编程基础 0 到 1【三】
    682. 棒球比赛题目链接682. 棒球比赛题目描述你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作......
  • Wordpress:安装Astra主题后,无法找到主题模板?
    在使用Wordpress安装Astra后,发现侧栏Appearance没有出现StarterTemplates,这样就无法使用很多Astra相关的免费模板,如何解决?1.点击Plugins,在搜索框输入StarterTemplates,安装后激活 2.在Appearance找到StarterTemplates,进入即可选择喜欢的模板。 ......