省选专练(这个真的有省选难度?)期望入门铃仙

在幻想乡,铃仙•优昙华院•稻叶是从月球逃到永远亭的月兔。同样居住在永远亭的地球兔子因幡帝老是对铃仙恶作剧。某一天,铃仙终于决定要惩罚一下帝,不过首先得在迷途竹林里把帝抓住。永远亭的迷途竹林可以视为一个由N个路口(编号1..N),M条单向路连接的区域。开始时,帝在路口1,每一个单位时间,帝会以相同的概率走到相邻的路口或是停留在当前路口,一条路可以重复走,但是帝不会走回头路,也就是说如果帝从路口x走到了路口y,在到过其他路口前,她一定不会从路口y走回路口x。现在铃仙想知道,在T秒钟以后,在哪个路口抓到帝的可能性最大。

我的数学真的垃圾(可见初中数学联赛之水)

这是正推的期望,因为你要考虑回头路,于是你得上一维推下一维。(于是不会期望的我就死绝在这里了)

然后就是水题了。

f(i,j,k)又i->j当前时间为k的概率

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,T;
int g[101][101]={};
double dp[101][101][510]={};
int cd[101]={};
int main(){
	int n,m,T;
	scanf("%d%d%d",&n,&m,&T);
	for(int i=1;i<=m;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		g[u][v]=1;
		cd[u]++;
	}
//	for(int i=1;i<=n;i++){
//		dp[i][1][0]=(1.0/(double)n);
//	}
	dp[0][1][0]=1;
	for(int i=1;i<=T;i++){
		for(int k=1;k<=n;k++){
			for(int j=0;j<=n;j++){
				double now=0.0;	
				double div=cd[k]+1;
				if(g[k][j]==1)
					div--;
				if(div)
					now=dp[j][k][i-1]/(double)div;
				dp[j][k][i]+=now;
				for(int ii=1;ii<=n;ii++){
					if(ii!=j&&g[k][ii]==1){
						dp[k][ii][i]+=now;
					}
				}
//				cout<<j<<" "<<k<<" "<<now<<endl;
			}
		}
//		for(int j=1;j<=n;j++){
//			double now=0;
//			for(int k=0;k<=n;k++){
//				now+=dp[k][j][i];
//			}
//			now*=100;
//			printf("%.3lf%\n",now);
//		}
//		printf("------------qaq\n");
	}
	for(int i=1;i<=n;i++){
		double now=0;
		for(int j=0;j<=n;j++){
			now+=dp[j][i][T];
		}
		now*=100;
		printf("%.3lf\n",now);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值