poj 2096 , zoj 3329 , hdu 4035 —— 期望DP

题目:http://poj.org/problem?id=2096

题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种;

所以设 f[i][j] 表示已经有几种,转移一下即可。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef double db;
int const xn=1005;
int n,s; db f[xn][xn];
int main()
{scanf("%d%d",&n,&s);for(int i=n;i>=0;i--)for(int j=s;j>=0;j--){if(i==n&&j==s)continue;db p0=1.0*i/n*j/s,p1=1.0*(n-i)/n*j/s,p2=1.0*i/n*(s-j)/s,p3=1.0*(n-i)/n*(s-j)/s;f[i][j]=p1*f[i+1][j]+p2*f[i][j+1]+p3*f[i+1][j+1]+1;f[i][j]=f[i][j]/(1-p0);}printf("%.6f\n",f[0][0]);return 0;
}
View Code

 

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754

带环的期望DP,本来用高斯消元可以做,但 n^3 * T 过不了;

发现每个状态都有到 f[0] 的转移,所以设 f[i] = A[i] * f[0] + B[i] (套路!)

然后把递推式子代入一番,得到 A[i] 和 B[i] 的转移是无环的,求出 A[0], B[0] 即可。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef double db;
int rd()
{int ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return f?ret:-ret;
}
int const xn=550;
int n,f[xn]; db p[20],A[xn],B[xn];
int main()
{int T=rd();while(T--){n=rd(); int k1=rd(),k2=rd(),k3=rd(),a=rd(),b=rd(),c=rd(),sum=k1+k2+k3;for(int i=0;i<=sum;i++)p[i]=0;p[0]=1.0/(k1*k2*k3);for(int i=1;i<=k1;i++)for(int j=1;j<=k2;j++)for(int k=1;k<=k3;k++)if(i!=a||j!=b||k!=c)p[i+j+k]+=p[0];for(int i=0;i<=n+sum;i++)A[i]=0,B[i]=0;for(int i=n;i>=0;i--){for(int k=3;k<=sum;k++)A[i]+=p[k]*A[i+k],B[i]+=p[k]*B[i+k];A[i]+=p[0]; B[i]+=1;}printf("%.10f\n",B[0]/(1-A[0]));}return 0;
}
View Code

 

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4035

树上带环!同样可以高斯消元,但复杂度不行;

设 \( f[x] \) 表示在 x 这个点距离结束的期望,\( P[x] = 1 - K[x] - E[x] \),\( d[x] \) 为度数,得到朴素方程:

\( f[x] = K[x] * f[1] + \frac{P[x]}{d[x]}(f[fa]+1) + \frac{P[x]}{d[x]}\sum\limits_{v \in son}(f[v]+1) \)

由于转移的顺序实际上应该是从 \( fa \) 到 \( x \),又因为每个点都和 \( 1 \) 组成环(或者因为最后要求 \( f[1] \) ?),所以设 \( f[x] = A[x]f[1] + B[x]f[fa] + C[x] \)

于是可以树形DP得到 \( A[x], B[x], C[x] \)

\( f[1] = \frac{C[1]}{1-A[1]} \),当 \( A[1] \) 趋近于 1 时无解;

eps 设成 1e-8 会 WA,1e-10 才可以。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define eps 1e-10
using namespace std;
typedef double db;
int rd()
{int ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return f?ret:-ret;
}
int const xn=10005;
int n,hd[xn],ct,to[xn<<1],nxt[xn<<1],d[xn];
db K[xn],E[xn],P[xn],A[xn],B[xn],C[xn];
void add(int x,int y){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct;}
void dfs(int x,int fa)
{db as=0,bs=0,cs=0;for(int i=hd[x],u;i;i=nxt[i]){if((u=to[i])==fa)continue;dfs(u,x);as+=A[u]; bs+=B[u]; cs+=C[u];}A[x]=(d[x]*K[x]+P[x]*as)/(d[x]-P[x]*bs);B[x]=P[x]/(d[x]-P[x]*bs);C[x]=(P[x]*cs+d[x]*P[x])/(d[x]-P[x]*bs);
}
int main()
{int T=rd(),cnt=0;while(T--){cnt++; n=rd(); ct=0; memset(hd,0,sizeof hd); memset(d,0,sizeof d);for(int i=1,x,y;i<n;i++)x=rd(),y=rd(),add(x,y),add(y,x),d[x]++,d[y]++;for(int i=1;i<=n;i++)scanf("%lf%lf",&K[i],&E[i]),K[i]/=100,E[i]/=100,P[i]=1-K[i]-E[i];for(int i=1;i<=n;i++)A[i]=B[i]=C[i]=0;dfs(1,0);printf("Case %d: ",cnt);if(fabs(A[1]-1)<eps)puts("impossible");else printf("%.8f\n",C[1]/(1-A[1]));}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/Zinn/p/10278561.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vector占用内存的释放

vector<int> v1; v1.push_back(9); {Vector<int>tmp v1;V1.swap(tmp); } 使用{ }的目的是让tmp退出{ }时自动析构。 标准解决办法&#xff1a; template < class T > void ClearVector( vector< T >&vt ) {vector< T > vtTemp; veTemp.swa…

[C++]MySQL数据库操作实例

由于课程大实验需要使用c操作MySQL数据库&#xff0c;经过一番研究终于成功实现VS2008中与MySQL的连接。环境设置&#xff1a;安装完MySQL之后&#xff0c;将安装目录中的include目录下的libmysql.lib文件拷到VS2008安装目录中的VC\lib\下&#xff0c;然后在项目-选项-c/c-常规…

JS面向对象编程实现

Function 在 中是一个很特殊的对象&#xff0c;其特殊性体现在它的多重身份。 Function 可以声明普通的函数&#xff0c;这一点和其他语言中的函数概念是相同的。除此以外&#xff0c;Function还可以用作类型的声明和实现、对象的构造函数&#xff0c;以及类引用。 Apply和Call…

android 界面布局 很好的一篇总结 【转】

布局&#xff1a; 在 android 中我们常用的布局方式有这么几种&#xff1a; 1.LinearLayout ( 线性布局 ) &#xff1a;(里面只可以有一个控件&#xff0c;并且不能设计这个控件的位置&#xff0c;控件会放到左上角) 线性布局分为水平线性和垂直线性二者的属性分别为&#xf…

MapInfo开发心得——控件篇

前阵做一个项目过程中&#xff0c;需要结合MapInfo进行地方展示开发&#xff0c;积累一点点心得与大家共享以下所有基于MapXtreme 6.6MapInfo提供了足够强大的WinForm地图空间&#xff0c;可以很方便地在VS中拖拉摆放。但如此强大的控件也带来了封闭性太强的问题。现在我们都接…

linux下epoll如何实现高效处理百万句柄的

开发高性能网络程序时&#xff0c;windows开发者们言必称iocp&#xff0c;linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术&#xff0c;可以非常高效的处理数以百万计的socket句柄&#xff0c;比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽…

89个嵌入式相关概念,你懂了几个?

嵌入式、计算机的学习&#xff0c;最基础的就是弄清一些概念。嵌入式、计算机相关的概念很多&#xff0c;这次汇总整理一些&#xff1a;1. 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;&#xff1a;是管理计算机硬件与软件资源的系统软件&#xff0c;同时也…

每天一个linux命令(lsof)

losf----系统级监控、诊断工具安装&#xff1a;yum install lsof格式&#xff1a;lsof [选项] [绝对路径文件名 | 其他参数]主要选项&#xff1a;D&#xff1a;递归查找除该路径下所有打开的文件[rootroot ~]# lsof D /usr/lib COMMAND PID USER FD TYPE DEVICE SIZE…

正确使用PresentModalViewController

Present ViewController Modally 一、主要用途 弹出模态ViewController是IOS变成中很有用的一个技术&#xff0c;UIKit提供的一些专门用于模态显示的ViewController&#xff0c;如UIImagePickerController等。弹出模态ViewController主要使用于一下这几种情形&#xff1a; 1、…

word 2007 中插入图片无法显示,只能显示底部一部分

故障现象 向正在编辑的Word文档中插入一个图形时&#xff0c;发现插入的图形只显示出了一部分。下半部分&#xff0c;图片上面有文字&#xff0c;还能输入文字和回车。好像图片在文字下面一样&#xff0c;就露出了一个底部。无论怎样调整都不能解决问题&#xff0c;如果用浮…

使用VLC转码,在HTML5页面播放实时监控

首先要获取摄像机品牌的RTSP地址&#xff1a; 如大华的是rtsp://user:pwdip:port/cam/ realmonitor?channel1&subtype0 海康的是rtsp://user:pwdip:port/MPEG-4/ch1/main/av_stream Html5 <video>并不支持rtsp,所以使用vlc进行转码,将rtsp转http流,这样<video&g…

聊聊Linux中线程和进程的联系与区别!

大家好&#xff0c;推荐飞哥的一篇文章&#xff01;关于进程和线程&#xff0c;在 Linux 中是一对儿很核心的概念。但是进程和线程到底有啥联系&#xff0c;又有啥区别&#xff0c;很多人还都没有搞清楚。在网上对进程和线程的讨论中&#xff0c;很多都是聚集在这二位有啥不同。…

Docker swarm 实战-部署wordpress

Docker swarm 实战-部署wordpress 创建一个overlay的网络 docker network create -d overlay demo6imq8da3vcwvj2n499k4bwdlt docker network ls NETWORK ID NAME DRIVER SCOPE feea5ba8507b bridge bridge …

浅谈jQuery的选择器

jQuery的选择器可谓之强大无比&#xff0c;这里简单地总结一下常用的元素查找方法 $("A B") 查找A元素下面的所有子节点&#xff0c;包括非直接子节点 $("A>B") 查找A元素下面的直接子节点 $("AB") 查找A元素后面的兄弟节点&#xff0c;包括非…

注册广播

动态注册&#xff1a;detectionSDkBroadcastReceiver new DetectionSDkBroadcastReceiver();IntentFilter intentFilter new IntentFilter();intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);intentFilter.addDataS…

2018年上半年总结

2018年上半年即将过去&#xff0c;在这半年里经历了很多的事情&#xff0c;让自己在各方面成长了很多&#xff0c;但也失去了很多&#xff0c;有些事情让我刻骨铭心&#xff0c;也让我明白了很多的事情&#xff0c;包括&#xff1a;家庭、工作、生活、相处等。 先说下工作上的事…

比GDB方便n倍的调试工具——CGDB

CGDB 是GDB的前端&#xff0c;在终端窗口中意图形化的形式来调试代码(基于ncurse)&#xff0c;非常方便。相对于GDB来说&#xff0c;可以很大的提高效率。这篇文章就来分享一下CGDB的最基本使用方法&#xff0c;如果是第一次听说&#xff0c;强烈建议您体验一下&#xff0c;一定…

linux--切换ipython解释器到python3

Ipython修改为python3解释器&#xff1a; which ipython --得到路径 cat 路径--查看执行的解释器版本 sudo gedit 路径--修改解释器版本为python3保存即可&#xff0c;保存的时候提示异常&#xff0c;这个是正常现象&#xff0c;实际上已经保存成功。测试 which ipython 路径 c…

数据库中字段类型Number(n,m)大概说明

number可以存储浮点数&#xff0c;也可以存储整数。Number(n,m) int类型只能存放整数。 a、number(4,3)是表示这个数一共有4位是有效位,后面的3表示有3个是小数也就是这个数&#xff0c;只能是1.234,这样格式的最大只能是9.999,b、number&#xff08;3,4&#xff09; 表示这个…

WCF Security userName/Password

1. Transfer SecurityTransfer Security 主要包括三个方面&#xff1a; "消息完整性(Message Integrity)"、"消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)"。消息完整性必须确保消息在传输过程中没有被篡改&…