因为过年,好久没更博客了,最近要狂补题解了==

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+高斯消元(近日吐槽)相关推荐

  1. BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元

    BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...

  2. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  3. BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】

    题目描述: 中文题面,不多解释.1778传送门 3270 传送门 (博物馆)题目分析: 也许很多人做概率题的时候都有种虚幻感..感觉莫名其妙就得出一个期望.概率,一知半解... 所以我在这里仔细地剖析 ...

  4. BZOJ3270 博物館 概率DP 高斯消元

    BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...

  5. BZOJ 3270: 博物馆 [概率DP 高斯消元]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...

  6. 【BZOJ3640】JC的小苹果 概率DP+高斯消元

    [BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...

  7. 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}的序列,现在裁判开始投掷骰子,并且把每次的 ...

  8. bzoj 4820: [Sdoi2017]硬币游戏 概率dp+高斯消元+KMP

    题意 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强趣味性,所以要找一个同学扔很多 ...

  9. [BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)

    https://blog.csdn.net/xyz32768/article/details/83217209 不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可. 但朴素消元显 ...

最新文章

  1. 王豪:HW265到“HW266”
  2. iOS应用开发入门(3)——点击button控制textview
  3. openresty获取nginx请求url中的所有参数
  4. torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim
  5. SIGIR 2021 | 基于不确定性正则化与迭代网络剪枝的终身情感分类方法
  6. 如何使java中double类型不以科学计数法表示
  7. SAP S/4HANA里如何创建Customer主数据以及执行后续处理
  8. Mysql 无法插入中文,中文乱码解决
  9. 奇妙的安全旅行之MD算法
  10. 可以学习的国外课件链接地址(自己收集)
  11. c语言学习-对从键盘输入的一个字符串中的大英字母及数字进行计数
  12. 计算机毕业设计源码分享双鱼林,计算机毕业课程设计论文源码-057双鱼林asp教务选课信息系统...
  13. 极速安装JumpServer - 官方文档版
  14. mysqldump gzip压缩 备份及还原
  15. pcs7更改项目计算机名时出错,PCS7 v8.1 亚洲版 问题汇总
  16. Windows生成SSH密钥
  17. 嵌入式系统测试教学实训平台系统情况
  18. VUE之VUEX常见面试题大全汇总--史上最全【vuex面试题】
  19. 计算机应用文写作C,计算机应用和公文写作
  20. 工具善其事,必先被苦逼的其器所钝伤然后打磨之才能利其器

热门文章

  1. CentOS离线安装gcc4.8.2 + 并安装网卡驱动
  2. automake使用实例
  3. 系统设计面试的答题思维框架
  4. Laravel源码解析之ENV配置
  5. 亚马逊 html格式转换,亚马逊七种产品描述常用HTML代码,文字颜色代码让Listing更出彩...
  6. java设置首页跳转_SpringBoot设置首页(默认页)跳转功能的实现方案
  7. 关于tx-lcn分布式事务框架的几个问题
  8. 解决ros::TimeNotInitializedExcep
  9. 05Vue.js快速入门-Vue实例详解与生命周期
  10. mysql 插入数据乱码