期望dp自学笔记

6 篇文章 0 订阅

期望dp

第一次做这种题,搜了好多相关的资料才看懂。

规律

1.期望可以分解成多个子期望的加权和,权为子期望发生的概率,即
E ( a A + b B + … ) E ( a A + b B + … ) E(aA+bB+)
= a E ( A ) + b E ( B ) + … + 1 E ( a A + b B + … ) =a E ( A ) + b E ( B ) + … + 1 E(aA+bB+…) =aE(A)+bE(B)++1E(aA+bB+)
= a E ( A ) + b E ( B ) + … + 1 E ( a A + b B + … ) = aE(A) + bE(B) +…+1E(aA+bB+…) =aE(A)+bE(B)++1E(aA+bB+)
= a E ( A ) + b E ( B ) + … + 1 ; =aE(A)+bE(B)+…+1; =aE(A)+bE(B)++1
2.期望从后往前找,一般 d p [ n ] = 0 , d p [ 0 ] dp[n]=0,dp[0] dp[n]=0,dp[0] 是答案;
3.解决过程,找出各种情况乘上这种情况发生的概率,求和;
4.概率DP一定要初始化!
5.与常规的求解不同,数学期望经常逆向推出。

几种常见设转移方程数组的方法

f [ i ] f[ i ] f[i] 表示的是由 i i i 状态变成 最终 状态的期望
按照题意直接设
把选择的东西加入数组,如 f [ i ] [ j ] f[i][j] f[i][j] 表示第 i i i 个物品选 j j j 个的期望或 f [ i ] [ j ] f[i][j] f[i][j] 表示有 i i i A A A 物品,
j j j B B B 物品的期望

code:

#include <bits/stdc++.h>
using namespace std;
#define maxn 305
double f[maxn][maxn][maxn];//状态:f[i,j,k]:有i个一个寿司盘子,j个两个寿司盘子,k个三个寿司盘子的期望值。
int a[5];
int n;
int main() {
	scanf( "%d", &n );
	for ( int i = 1, x; i <= n; i ++ ) scanf( "%d", &x ), a[x] ++; //统计各种寿司盘有多少
	for ( int k = 0; k <= n; k ++ )
		for ( int j = 0; j <= n; j ++ )
			for ( int i = 0; i <= n; i ++ )
				if ( i or j or k ) {//数学期望 P=Σ每一种状态*对应的概率,没啥可说的。
					if ( i ) f[i][j][k] += f[i - 1][j][k] * i / (i + j + k); //个数为1的盘子吃掉一个就没有了;
					if ( j ) f[i][j][k] += f[i + 1][j - 1][k] * j / (i + j + k); //个数为2的盘子吃掉一个就少了一个个数为2的盘子,多一个个数为1的盘子;
					if ( k ) f[i][j][k] += f[i][j + 1][k - 1] * k / (i + j + k); //个数为3的盘子吃掉一个就少了一个个数为3的盘子,多一个个数为2的盘子
					f[i][j][k] += n * 1.0 / (i + j + k);
				}
	printf( "%.10f\n", f[a[1]][a[2]][a[3]] );
}

还行,这个可以算个模板题了吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
期望dp和概率dp是两种不同的动态规划方法。 期望dp是指通过计算每个状态的期望值来求解最终的期望。在期望dp中,我们通常定义dp\[i\]表示在第i个状态时的期望值,然后通过状态转移方程来更新dp数组,最终得到最终状态的期望值。期望dp通常用于求解期望问题,例如求解骰子的期望点数、求解抽奖的期望次数等。 概率dp是指通过计算每个状态的概率来求解最终的概率。在概率dp中,我们通常定义dp\[i\]表示在第i个状态时的概率,然后通过状态转移方程来更新dp数组,最终得到最终状态的概率。概率dp通常用于求解概率问题,例如求解抛硬币出现正面的概率、求解从一副牌中抽到红心的概率等。 总结来说,期望dp和概率dp的区别在于它们所计算的是不同的值,期望dp计算的是期望值,而概率dp计算的是概率值。 #### 引用[.reference_title] - *1* [概率/期望dp专题](https://blog.csdn.net/qq_34416123/article/details/126585094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【动态规划】数学期望/概率DP/期望DP详解](https://blog.csdn.net/weixin_45697774/article/details/104274160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值