hdu 4418 Time travel 概率DP
高斯消元求期望!!
将n时间点构成2*(n-1)的环,每一点的期望值为dp[i]=dp[i+1]*p1+dp[i+2]*p2+……+dp[i+m]*pm+1.
这样就可以多个方程,利用高斯消元求解。
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#define MAX 200
#define eps 1e-8
using namespace std;
double p[MAX],a[MAX][MAX],ans[MAX];
int N,n,m,num[MAX],row,col,cnt;
int gauss()
{
int k,i,j;
for(i=,j=;i<row&&j<col;i++,j++){
int m=i;
for(k=i+;k<row;k++)
if(fabs(a[k][j])-fabs(a[m][j])>eps)
m=k;
if(fabs(a[m][j])<eps) return ;
if(m!=i)
for(k=;k<=col;k++)
swap(a[i][k],a[m][k]);
double aa=a[i][j];
for(k=i+;k<row;k++){
double bb=a[k][j]/aa;
for(int l=j;l<=col;l++){
a[k][l]-=bb*a[i][l];
}
}
}
for(i=col-;i>=;i--){
for(j=i+;j<col;j++)
a[i][col]-=a[i][j]*ans[j];
ans[i]=a[i][col]/a[i][i];
}
return ;
}
void bfs(int s)
{
queue<int>q;
memset(num,-,sizeof(num));
cnt=;
num[s]=cnt++;
q.push(s);
while(!q.empty()){
int t=q.front();
q.pop();
for(int i=;i<=m;i++){
if(fabs(p[i])<eps) continue;
int k=(i+t)%n;
if(num[k]==-){
num[k]=cnt++;
q.push(k);
}
}
}
}
int main(){
int t,i,j,x,y,d,tm,k;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d%d",&N,&m,&y,&x,&d);
for(i=;i<=m;i++){
scanf("%lf",&p[i]);
p[i]/=100.0;
}
if(x==y){
printf("0.00\n");
continue;
}
n=*N-;
if(d==) x=n-x;
bfs(x);
if(num[y]==-&&num[n-y]==-){
printf("Impossible !\n");
continue;
}
memset(a,,sizeof(a));
memset(ans,,sizeof(ans));
row=col=cnt;
for(i=;i<n;i++)
if(num[i]!=-){
a[num[i]][num[i]]=;
if(i==y||i==n-y){
ans[num[i]]=;
continue;
}
for(j=;j<=m;j++){
tm=(i+j)%n;
if(num[tm]!=-){
a[num[i]][num[tm]]-=p[j];
a[num[i]][cnt]+=j*p[j];
}
}
}
if(gauss()) printf("%.2lf\n",ans[num[x]]);
else printf("Impossible !\n");
}
return ;
}
hdu 4418 Time travel 概率DP的更多相关文章
- HDU 4418 Time travel 期望dp+dfs+高斯消元
		题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4418 Time travel Time Limit: 2000/1000 MS (Java/Othe ... 
- HDU 4418 高斯消元法求概率DP
		把两种状态化成2*n-2的一条线上的一种状态即可.很容易想到. 高斯列主元法,不知为什么WA.要上课了,不玩了...逃了一次课呢.. #include <iostream> #includ ... 
- HDU 4089 Activation(概率DP)(转)
		11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ... 
- HDU - 5001 Walk(概率dp+记忆化搜索)
		Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ... 
- HDU 4405 Aeroplane chess  (概率DP)
		题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ... 
- HDU 2955  Robberies  背包概率DP
		A - Robberies Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ... 
- HDU-4418 Time travel 概率DP,高斯消元
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4418 题意:简单来说就是给你1个环(n - 1 , n - 2 …… 0 ,1 , 2 , 3 …… ... 
- HDU 4576 Robot (概率DP)
		暴力DP求解太卡时间了...........写挫一点就跪了 //hdu robot #include <cstdio> #include <iostream> #include ... 
- 2016ACM/ICPC亚洲区沈阳站H - Guessing the Dice Roll HDU - 5955 ac自动机+概率dp+高斯消元
		http://acm.hdu.edu.cn/showproblem.php?pid=5955 题意:给你长度为l的n组数,每个数1-6,每次扔色子,问你每个串第一次被匹配的概率是多少 题解:先建成ac ... 
随机推荐
- 自定义textbox加入左右晃动效果
			应用开发过程中经常会要求用户在textbox进行输入.例如:登陆,发布. 而一般没进行输入的时候我们都会简单的进行弹窗提示用户输入. 前阵子ios的同学搞了一个左右晃动的效果,觉得还不错,于是也搞了个 ... 
- 解决ubuntu 14.04 下eclipse 3.7.2 不能启动,报Could not detect registered XULRunner to use  或 org.eclipse.swt.SWTError: XPCOM 等问题的处理
			对于eclipse 3.7.2在ubuntu 14.04下不能启动,需要在 eclipse/configuration 目录下的config.ini文件内增加一行org.eclipse.swt.bro ... 
- Silverlight C#动态设置样式
			1.从页面资源中获取样式并应用 btnTest.Style = (Style)this.Resources["BigButtonStyle"] 2.从项目中单独分开的资源字典文件( ... 
- java.lang.NoClassDefFoundError  Adding a jar to an RCP application
			给RCP中加入jar包与一般的java工程是有些个区别的,否则会出现"java.lang.NoClassDefFoundError" Open plug-in.xmlGo to R ... 
- JVM学习---JAVA内存
			一.JAVA运行时数据区域:JAVA中的运行时内存区域有的随着虚拟机进程的启动而存在,有的区域则是依赖用户线程的启动和结束而建立和销毁的.包括以下的几个区域. 图. JAVA虚拟机运行时数据区 1.程 ... 
- 冒泡排序(Bubble Sort)
			常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ... 
- mac常用设置
			1.修改mac主机名 系统偏好设置->共享->电脑名称 ,编辑就可以了. sudo scutil --set HostName hostname 这个是修改主机名 sudo scutil ... 
- 【转载】Powershell获取世纪互联Office365所有用户最后一次登录时间
			#$Mails=get-mailbox -ResultSize 10 $Mails=get-mailbox -ResultSize Unlimited $Mails | Measure-Object ... 
- linux下的汇编环境搭建(nasm)
			第一步:先判断系统是否已经安装了nasm--------------->打开终端,执行whereis nasm :如果显示nasm: /usr/bin/nasm ,则已经安装:如果只显示nasm ... 
- iOS多线程编程Part 3/3 - GCD
			前两部分介绍了NSThread.NSRunLoop和NSOperation,本文聊聊2011年WWDC时推出的神器GCD.GCD: Grand Central Dispatch,是一组用于实现并发编程 ... 
