长沙理工大学第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
我们可以开一个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
- 长沙理工大学第12届ACM大赛 G-跑路ing(概率DP)
- 长沙理工大学第十二届ACM大赛 G 跑路 ing (概率dp)
- 长沙理工大学第十二届ACM大赛 G.跑路ing【暴力】
- 长沙理工大学第十二届ACM大赛【9/12】
- 长沙理工大学第十二届ACM大赛 K.大家一起来数二叉树吧【Dp】
- 长沙理工大学第十二届ACM大赛 J 武藏牌牛奶促销
- 长沙理工大学第十二届ACM大赛 L 选择困难症 (优化点的暴力)
- 长沙理工大学第十二届ACM大赛 K 大家一起来数二叉树吧 (动态规划)
- 长沙理工第12届ACM大赛 L-选择困难症(折半枚举+二分)
- 长沙理工大学第十二届ACM大赛 I.主持人的烦恼【贪心】
- 长沙理工大学第十二届ACM大赛 D 小M和天平
- 长沙理工大学第十二届ACM大赛 C 安卓图案解锁
- “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 G.打字【Dp+贪心】水题
- 第七届河南理工大学程序设计大赛(正式赛)G题
- 【第八届河南理工大学程序设计大赛(正式赛)】 B E F G I J M
- 河南理工大学程序设计(ACM)大赛解题报告
- 奇怪的二进制(长沙理工大学第十一届程序设计竞赛)
- 蛇形矩阵 (长沙理工大学第十一届程序设计竞赛)
- rem.js
- HDU-1542/POJ-1151 Atlantis(矩形并面积--线段树+离散化)
- 删除db重复记录
- S3C6410启动方式
- 【润乾报表5】HTML事件--获取单元格值
- 长沙理工大学第12届ACM大赛 G-跑路ing(概率DP)
- leetcode10. Regular Expression Matching
- LintCode Word Break II
- 安卓开发类似QQ、微信优化APP启动速度,记录返回桌面前的任务栈状态
- Linux删除(清空)正在运行的应用日志文件内容
- sqoop数据导入
- UNICODE环境下CString转char*
- 如何实现JDBC连接mysql数据库
- Hibernate注解配置与XML配置区别