CF113D 高斯消元、dp
题目链接
https://codeforces.com/contest/113/problem/D
思路
\(k[i]=\frac{1-p[i]}{ru[i]}\)
f[i][j]表示经过i和j的次数的期望=概率
\(f[i][j]=p[i]*p[j]*f[i][j]\)
\(+k[i]*p[j]*f[u][j]\)
\(+p[i]*k[j]*f[i][v]\)
\(+k[i]*k[j]*f[u][v]\)
把右边的f[i][j]边移过去
可以用高斯消元解方程来进行dp
错误
好多细节没明白
比如f[s][s]=1
orzattack
代码
#include <iostream>
#include <vector>
#include <cmath>
#include <cstdio>
const int N=500;
using namespace std;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,m,a,b,ru[N],id[N][N];
vector<int> G[N];
double k[N],p[N],f[N][N];
void init() {f[id[a][b]][n*n+1]=-1;for(int i=1;i<=n;++i) {for(int j=1;j<=n;++j) {int sdgzy=id[i][j];--f[sdgzy][sdgzy];if(i!=j) f[sdgzy][sdgzy]+=p[i]*p[j];for(vector<int>::iterator x=G[i].begin();x!=G[i].end();++x) {for(vector<int>::iterator y=G[j].begin();y!=G[j].end();++y) {if(*x==*y) continue;f[sdgzy][id[*x][*y]]+=k[*x]*k[*y];}}for(vector<int>::iterator it=G[i].begin();it!=G[i].end();++it) {if(*it==j) continue;f[sdgzy][id[*it][j]]+=k[*it]*p[j];}for(vector<int>::iterator it=G[j].begin();it!=G[j].end();++it) {if(*it==i) continue;f[sdgzy][id[i][*it]]+=k[*it]*p[i];}}}
}
double ans[N];
void gauss() {int N=n*n;for(int i=1;i<=N;++i) {int mx=i;for(int j=i+1;j<=N;++j)if(f[j][i]>f[mx][i]&&f[j][i]!=0) mx=j;if(mx!=i) swap(f[i],f[mx]);for(int j=1;j<=N;++j) {if(i==j) continue;double p=f[j][i]/f[i][i];for(int k=i;k<=N+1;k++) {f[j][k]-=f[i][k]*p;}}}for(int i=1;i<=N;++i) f[i][i]=f[i][N+1]/f[i][i];
}
int main() {n=read(),m=read();a=read(),b=read();for(int i=1;i<=m;++i) {int x=read(),y=read();G[x].push_back(y);G[y].push_back(x);ru[x]++;ru[y]++;}for(int i=1;i<=n;++i) scanf("%lf",&p[i]);for(int i=1;i<=n;++i) k[i]=(1.0-p[i])/ru[i];for(int i=1,cnt=0;i<=n;++i)for(int j=1;j<=n;++j)id[i][j]=++cnt;init();gauss();for(int i=1;i<=n;++i) printf("%.10lf ",f[id[i][i]][id[i][i]]);return 0;
}
转载于:https://www.cnblogs.com/dsrdsr/p/10417815.html
CF113D 高斯消元、dp相关推荐
- bzoj 2707: [SDOI2012]走迷宫(Trajan+高斯消元+Dp)
2707: [SDOI2012]走迷宫 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 862 Solved: 328 [Submit][Statu ...
- 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}的序列,现在裁判开始投掷骰子,并且把每次的 ...
- [BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)
https://blog.csdn.net/xyz32768/article/details/83217209 不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可. 但朴素消元显 ...
- 【高斯消元】兼 【期望dp】例题
[总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $ ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
- HDU 5119 Happy Matt Friends(DP || 高斯消元)
题目链接 题意 : 给你n个数,让你从中挑K个数(K<=n)使得这k个数异或的和小于m,问你有多少种异或方式满足这个条件. 思路 : 正解据说是高斯消元.这里用DP做的,类似于背包,枚举的是异或 ...
- CF24D Broken robot | DP 高斯消元
题目链接 直接$dp$会有后效性,用高斯消元解决. 因为在这道题中列出的增广矩阵很有特点,所以用$O(M)$的时间复杂度就可以解出来. 注意$m=1$时的情况. #include<iostrea ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...
- 洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
传送门 首先,异或的话直接讨论不好讨论,那么我们可以按位讨论,对于每一位讨论出来一个结果,然后将结果相加就好了. 然后考虑怎么讨论一位上的结果. 我们可以设出来一个dp方程:f(i)表示i到n的异或和 ...
最新文章
- 大学毕业没有实习经历_我是如何在大学毕业后没有实习的情况下获得第一份开发人员工作的...
- 为啥辣椒会辣得人嘴巴疼?这个问题竟然和今年诺奖有关
- STC单片机下载实验
- pytorch_导入d2l_pytorch包问题
- apache2.4.6支不支持jsp_Spring Boot中文参考指南(2.1.6)50、Kotlin 支持
- gdb调试android
- 万字长文了解免疫算法原理 及求解复杂约束问题(源码实现)
- 2013年06月电脑公司GHOSTXPSP3装机版◆年中推荐◆
- 《架构探险——从零开始写Java Web框架》这书不错,能看懂的入门书
- css文件如何设置scss,Webpack - 如何将scss编译成单独的css文件?
- android studio lambda插件,Android Studio Lambda插件(gradle-retrolambda)安装
- 数据库知识 | 关系型数据库与非关系型数据库小记录
- 一些php+mysql的开源网上商城
- 30 秒裁剪的很大一部分作用是观察什么对别人是重要的
- Linux系统管理(6)——Linux下启动Redis服务的几种方法
- 请善待身边的 IT 狗
- 如何保护进程 不被结束_花草种植技术如何保护花草树木不受伤害
- 【LeetCode - 247】中心对称数 II
- java 立体几何体中心点_高中数学知识点大全,立体几何核心考点及解题技巧
- jsp左侧菜单栏_HTML页面左侧菜单栏切换实现右侧主体内容改变
热门文章
- iphone主屏幕动态壁纸_苹果11怎么设置动态壁纸?这个简单!只需这样操作
- tomcat实现https双向认证(在win10系统使用jdk1.8自带工具keytool)
- html5整个桌面背景图片,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...
- Python 柱状图 横坐标 名字_Python爬虫实例(二)——爬取新馆疫情每日新增人数
- merge规则 python_用Python处理PDF
- 系统学习机器学习之参数方法(二)
- python 爬虫_python爬虫技术汇总
- java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...
- oracle非管理员锁表,oracle默认管理员的帐号和密码以及密码修改和解除锁定
- 的内怎么放_燕窝买回来怎么炖?资深窝友告诉你!