长沙理工大学第12届ACM大赛 G-跑路ing(概率DP)

来源:互联网 发布:arcgis js 轨迹运动 编辑:程序博客网 时间:2024/04/28 05:14

题目描述

vigoss18 辞职成功终于逃出了公司,但是没过太久,公司就发现vigoss18 的所作所为,于是派人来把他抓
回去。
vigoss18 必须一直跑路,躲避公司的围捕。可以抽象的看成一个有向图,图中可能存在重边和自环。
刚开始他站在位置1,每单位时间vigoss18 必须从目前站的位置,等概率选择一条边然后移动到对应的节
点上去或者不动(如果当前节点有t条边,则有1/(t+1)的概率选择一条边移动或者原地不动),可以认为每次需
要花费1 单位时间。
他就这样一直跑一直跑,过了很长很长的时间...
公司把你派出来寻找vigoss18,如果能抓到他,你将能升官发财赢取白富美走向人生巅峰。
但是你精力有限,不是太走的开身,所以写了一个程序,来计算vigoss18 在每个位置的概率,可以认为过
了很长时间以后,vigoss18 在每个位置的概率是收敛的。所以你需要告诉上司,他最可能在哪个位置(概率
最大的那个位置)。

你的上司并不想知道过程,他只想知道结果,所以你只需要告诉他这个概率最大是多少即可。

输入描述:

多组输入,保证绝大部分为小数据。每组输入第一行n m(1<=n<=100,1<=m<=10000),表示n个点m条有向边。接下来m行,每行u v(1<=u,v<=n),表示有一条有向边从u连向v

输出描述:

算出vigoss18在所有位置的概率,并输出其中的最大值即可。 你的答案与标准答案的误差应保持在1e-6以内。
示例1

输入

3 31 22 33 1

输出

0.333333333
题解:好吧,我承认样例我没算出来,本来以为怎么算都是1/2?  后来才发现是一直跑,最后概率收敛。。。

我们可以开一个dp数组模拟每一时刻每个位置上的概率是多少,然后最终统计最大值即可。时刻规定到多少?

大约500就行了吧。 很坑的一点是重边和自环也要算一条边(意思就是当边给建上)。。。。不然会一直wa。。。。

#include<set>  #include<map>         #include<stack>                #include<queue>                #include<vector>        #include<string>      #include<math.h>       #include<stdio.h>                #include<iostream>                #include<string.h>                #include<stdlib.h>        #include<algorithm>       #include<functional>        using namespace std;typedef long long ll;#define inf 1000000000           #define mod 1000000007                 #define maxn  60     #define PI 3.1415926  #define lowbit(x) (x&-x)     #define eps 1e-9   double dp[505][105];vector<int>q[105];int main(void){double ans;int n, m, i, j, k, x, y;while (scanf("%d%d", &n, &m) != EOF){ans = 0;for (i = 0;i <= 500;i++)for (j = 0;j <= n;j++)dp[i][j] = 0;for (i = 1;i <= m;i++){scanf("%d%d", &x, &y);q[x].push_back(y);}dp[0][1] = 1.0;for(i=0;i<500;i++)for (j = 1;j <= n;j++){int siz = q[j].size();dp[i + 1][j] += dp[i][j] / (double)(siz + 1);for (k = 0;k < siz;k++)dp[i + 1][q[j][k]] = dp[i + 1][q[j][k]] + dp[i][j] / (double)(siz + 1);}for (i = 1;i <= n;i++)ans = max(ans, dp[500][i]);printf("%.8f\n", ans);for (i = 1;i <= n;i++)q[i].clear();}return 0;}


阅读全文
1 0
原创粉丝点击