欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

lightoj1265 Island of Survival(思维或dp)

程序员文章站 2022-07-02 11:22:45
vj传送门首先说一下非概率dp的解法\color{Red}首先说一下非概率dp的解法首先说一下非概率dp的解法说实话我看到就觉得自己傻X了鹿这个物种是没啥用的,既不会影响老虎的数量也不会影响人的数量而我们最后是否存活只和是否有老虎相关所以有多少鹿是无所谓的!!只有老虎和老虎的相遇有意义!!所以相当于ttt只老虎和111个人当ttt为奇数概率为零,否则是1t+1\frac{1}{t+1}t+11​的概率赢就是就是tt+1∗t−1t∗t−2t−1...∗12\frac{t}{t+1}*\frac...

vj传送门

首 先 说 一 下 非 概 率 d p 的 解 法 \color{Red}首先说一下非概率dp的解法 dp

说实话我看到就觉得自己傻X了

鹿这个物种是没啥用的,既不会影响老虎的数量也不会影响人的数量

而我们最后是否存活只和是否有老虎相关

所以有多少鹿是无所谓的!!只有老虎和老虎的相遇有意义!!

所以相当于 t t t只老虎和 1 1 1个人

t t t为奇数概率为零,否则是 1 t + 1 \frac{1}{t+1} t+11的概率赢

就是就是 t t + 1 ∗ t − 1 t ∗ t − 2 t − 1 . . . ∗ 1 2 \frac{t}{t+1}*\frac{t-1}{t}*\frac{t-2}{t-1}...*\frac{1}{2} t+1ttt1t1t2...21,然后只剩下一个人

然 后 是 概 率 d p \color{Red}然后是概率dp dp

设老虎 i i i只,鹿 j j j只,令 s = i + j s=i+j s=i+j

Ⅰ . 老 虎 和 人 相 遇 的 概 率 是 p 1 = 2 i s ∗ ( s + 1 ) Ⅰ.老虎和人相遇的概率是p_1=\frac{2i}{s*(s+1)} .p1=s(s+1)2i

Ⅱ . 老 虎 和 鹿 p 2 = 2 i j s ∗ ( s + 1 ) Ⅱ.老虎和鹿p_2=\frac{2ij}{s*(s+1)} .鹿p2=s(s+1)2ij

Ⅲ . 鹿 和 鹿 p 3 = j ∗ ( j − 1 ) s ∗ ( s + 1 ) Ⅲ.鹿和鹿p_3=\frac{j*(j-1)}{s*(s+1)} .鹿鹿p3=s(s+1)j(j1)

Ⅳ . 人 和 鹿 p 4 = 2 j s ∗ ( s + 1 ) Ⅳ.人和鹿p_4=\frac{2j}{s*(s+1)} .鹿p4=s(s+1)2j

Ⅴ . 老 虎 和 老 虎 p 5 = i ∗ ( i − 1 ) s ∗ ( s + 1 ) Ⅴ.老虎和老虎p_5=\frac{i*(i-1)}{s*(s+1)} .p5=s(s+1)i(i1)

假如当人碰到鹿,选择宰掉鹿

f [ i ] [ j ] = p 2 ∗ f [ i ] [ j − 1 ] + p 3 ∗ f [ i ] [ j ] + p 4 ∗ f [ i ] [ j − 1 ] + p 5 ∗ f [ i − 2 ] [ j ] f[i][j]=p_2*f[i][j-1]+p_3*f[i][j]+p_4*f[i][j-1]+p_5*f[i-2][j] f[i][j]=p2f[i][j1]+p3f[i][j]+p4f[i][j1]+p5f[i2][j]

( 1 − p 3 ) ∗ f [ i ] [ j ] = p 2 ∗ f [ i ] [ j − 1 ] + p 4 ∗ f [ i ] [ j − 1 ] + p 5 ∗ f [ i − 2 ] [ j ] (1-p_3)*f[i][j]=p_2*f[i][j-1]+p_4*f[i][j-1]+p_5*f[i-2][j] (1p3)f[i][j]=p2f[i][j1]+p4f[i][j1]+p5f[i2][j]

假如当人碰到鹿,选择放鹿一马

f [ i ] [ j ] = p 2 ∗ f [ i ] [ j − 1 ] + p 3 ∗ f [ i ] [ j ] + p 4 ∗ f [ i ] [ j ] + p 5 ∗ f [ i − 2 ] [ j ] f[i][j]=p_2*f[i][j-1]+p_3*f[i][j]+p_4*f[i][j]+p_5*f[i-2][j] f[i][j]=p2f[i][j1]+p3f[i][j]+p4f[i][j]+p5f[i2][j]

( 1 − p 3 − p 4 ) ∗ f [ i ] [ j ] = p 2 ∗ f [ i ] [ j − 1 ] + p 5 ∗ f [ i − 2 ] [ j ] (1-p_3-p_4)*f[i][j]=p_2*f[i][j-1]+p_5*f[i-2][j] (1p3p4)f[i][j]=p2f[i][j1]+p5f[i2][j]

二者取 m a x max max即可,无脑概率 d p dp dp

#include <bits/stdc++.h>
using namespace std;
double f[1009][1009];
int main()
{
	int T,n,m,casenum=0; cin >> T;
	while( T-- )
	{
		cin >> n >> m;//老虎和麋鹿 
		for(int i=0;i<=m;i++)	f[0][i]=1.0;
		for(int i=1;i<=n;i++)//枚举老虎的量
		for(int j=0;j<=m;j++)
		{
			if( i%2==1 )	f[i][j]=0.0;
			else
			{
				double s=(i+j)*(i+j+1);
				double p1 = 2.0*i/s;//和老虎相遇 
				double p2 = 2.0*i*j/s;
				double p3 = j*(j-1.0)/s;
				double p4 = 2.0*j/s;
				double p5 = i*(i-1.0)/s;
				double killer=0,goodman=0;
				if( j>=1 )	killer+=(p2+p4)*f[i][j-1];
				killer = ( killer+p5*f[i-2][j] )/(1-p3);
				if( j>=1 )	goodman+=p2*f[i][j-1];
				goodman = ( goodman+p5*f[i-2][j] )/(1-p3-p4);
				f[i][j] = max( killer,goodman );
			}
		}
		printf("Case %d: %.7lf\n",++casenum,f[n][m] );
		for(int i=0;i<=n;i++)
		for(int j=0;j<=m;j++) 	f[i][j]=0;
	}	
} 

本文地址:https://blog.csdn.net/jziwjxjd/article/details/109234690

相关标签: 期望DP