hdu4418 概率dp+高斯消元(近日吐槽)
因为过年,好久没更博客了,最近要狂补题解了==
1.做了几天的概率dp,稍后还要写一篇概率dp和期望的总结,当然,下面几天的专题还是概率dp
2.接着还要整理一个漂亮的高斯消元模板=
3.最近打了几场cf还有其他bc、cc和gym的比赛,个别好题补一下题解
然后就是开下一个专题和继续打比赛==
---------------------------我是漂亮的分割线-------------------------------------
随处吐槽,完毕开始写本题题解
首先期望方程:
E[pos]=sgn((E[pos]+i)*p[i]) i=1-m
终点E[e]=0,这个形成环了就能想到高斯消元
也就是pos点的期望是由他所能到达的m个点的期望+到达这点经过的i个点,当然需要乘以概率,期望嘛==
如何转化两个方向的问题,只要另外加上n-2个点即可,比如012345这6个点变成了0123454321
如何判断不可到达,就是在bfs的时候注意一个是能不能bfs到,一个是概率为0的别忘了
下面就是解高斯消元,具体看代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 #define eps 1e-8 8 int row,col,num[205]; 9 double a[205][205],x[205],p[205]; 10 int cnt,N,m; 11 int Gauss() 12 { 13 int tr,tc,i,j,max_r; 14 //temp_row,temp_col 15 for (tr=0,tc=0;tr<row&&tc<col;tr++,tc++) 16 { 17 max_r=tr; 18 for (i=tr+1;i<row;i++) 19 if (fabs(a[i][tc])>fabs(a[max_r][tc])) max_r=i; 20 if (fabs(a[max_r][tc])<eps) return 0;//多解即无解 21 if (max_r!=tr) 22 { 23 for (j=tc;j<col;j++) 24 swap(a[tr][j],a[max_r][j]); 25 swap(x[tr],x[max_r]); 26 } 27 for (j=tc+1;j<col;j++) a[tr][j]/=a[tr][tc]; 28 x[tr]/=a[tr][tc]; a[tr][tc]=1;//消tc列 29 for (i=0;i<row;i++) 30 if (i!=tr) 31 { 32 x[i]-=x[tr]*a[i][tc]; 33 for (j=tc+1;j<col;j++) a[i][j]-=a[tr][j]*a[i][tc]; 34 a[i][tc]=0; 35 } 36 } 37 return 1; 38 } 39 void bfs(int s) 40 { 41 int i,t,tmp; 42 memset(num,-1,sizeof(num)); 43 queue<int>q; 44 cnt=0; num[s]=cnt++; 45 q.push(s); 46 while (!q.empty()) 47 { 48 t=q.front(); q.pop(); 49 for (i=1;i<=m;i++) 50 { 51 if (fabs(p[i])<eps) continue; 52 tmp=(t+i)%N; 53 if (num[tmp]==-1) 54 { 55 num[tmp]=cnt++; 56 q.push(tmp); 57 } 58 } 59 } 60 } 61 int main() 62 { 63 //E[pos]=sgn((E[pos+i]+i)*p[i]); 64 int T,n,s,e,d,i,j,t; 65 scanf("%d",&T); 66 while (T--) 67 { 68 scanf("%d%d%d%d%d",&n,&m,&e,&s,&d); 69 for (i=1;i<=m;i++) { 70 scanf("%lf",&p[i]); 71 p[i]/=100.0; 72 } 73 if (s==e) { 74 printf("0.00\n"); 75 continue; 76 } 77 N=2*n-2; 78 if (d==1) s=N-s; 79 bfs(s);//标号 80 if (num[e]==-1&&num[N-e]==-1) { 81 printf("Impossible !\n"); 82 continue; 83 } 84 row=col=cnt;//build 85 //row行,col列,a数组左边系数矩阵,x数组右边答案矩阵 86 memset(a,0,sizeof(a)); 87 memset(x,0,sizeof(x)); 88 for (i=0;i<N;i++) 89 if (num[i]!=-1) 90 { 91 if (i==e||i==N-e) { 92 a[num[i]][num[i]]=1; 93 x[num[i]]=0; 94 continue; 95 } 96 a[num[i]][num[i]]=1; 97 for (j=1;j<=m;j++) 98 { 99 t=(i+j)%N; 100 if (num[t]!=-1){ 101 a[num[i]][num[t]]+=-p[j]; 102 x[num[i]]+=j*p[j]; 103 } 104 } 105 } 106 if (Gauss()) printf("%.2lf\n",x[num[s]]); 107 else printf("Impossible !\n"); 108 } 109 return 0; 110 }
View Code
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4418
转载于:https://www.cnblogs.com/xiao-xin/articles/4307621.html
hdu4418 概率dp+高斯消元(近日吐槽)相关推荐
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...
- BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】
题目描述: 中文题面,不多解释.1778传送门 3270 传送门 (博物馆)题目分析: 也许很多人做概率题的时候都有种虚幻感..感觉莫名其妙就得出一个期望.概率,一知半解... 所以我在这里仔细地剖析 ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...
- AC自动机 + 概率dp + 高斯消元 --- HDU 5955 or 2016年沈阳icpc H [AC自动机 + 概率dp + 高斯消元]详解
题目链接 题目大意: 就是有NNN个人,每个人都会猜一个长度为LLL的只包含{1,2,3,4,5,6}\{1,2,3,4,5,6\}{1,2,3,4,5,6}的序列,现在裁判开始投掷骰子,并且把每次的 ...
- bzoj 4820: [Sdoi2017]硬币游戏 概率dp+高斯消元+KMP
题意 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强趣味性,所以要找一个同学扔很多 ...
- [BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)
https://blog.csdn.net/xyz32768/article/details/83217209 不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可. 但朴素消元显 ...
最新文章
- 王豪:HW265到“HW266”
- iOS应用开发入门(3)——点击button控制textview
- openresty获取nginx请求url中的所有参数
- torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim
- SIGIR 2021 | 基于不确定性正则化与迭代网络剪枝的终身情感分类方法
- 如何使java中double类型不以科学计数法表示
- SAP S/4HANA里如何创建Customer主数据以及执行后续处理
- Mysql 无法插入中文,中文乱码解决
- 奇妙的安全旅行之MD算法
- 可以学习的国外课件链接地址(自己收集)
- c语言学习-对从键盘输入的一个字符串中的大英字母及数字进行计数
- 计算机毕业设计源码分享双鱼林,计算机毕业课程设计论文源码-057双鱼林asp教务选课信息系统...
- 极速安装JumpServer - 官方文档版
- mysqldump gzip压缩 备份及还原
- pcs7更改项目计算机名时出错,PCS7 v8.1 亚洲版 问题汇总
- Windows生成SSH密钥
- 嵌入式系统测试教学实训平台系统情况
- VUE之VUEX常见面试题大全汇总--史上最全【vuex面试题】
- 计算机应用文写作C,计算机应用和公文写作
- 工具善其事,必先被苦逼的其器所钝伤然后打磨之才能利其器
热门文章
- CentOS离线安装gcc4.8.2 + 并安装网卡驱动
- automake使用实例
- 系统设计面试的答题思维框架
- Laravel源码解析之ENV配置
- 亚马逊 html格式转换,亚马逊七种产品描述常用HTML代码,文字颜色代码让Listing更出彩...
- java设置首页跳转_SpringBoot设置首页(默认页)跳转功能的实现方案
- 关于tx-lcn分布式事务框架的几个问题
- 解决ros::TimeNotInitializedExcep
- 05Vue.js快速入门-Vue实例详解与生命周期
- mysql 插入数据乱码