hdu 4579 Random Walk 概率DP
2024-08-24 13:39:54
思路:由于m非常小,只有5。所以用dp[i]表示从位置i出发到达n的期望步数。
那么dp[n] = 0
dp[i] = sigma(dp[i + j] * p (i , i + j)) + 1 . (-m <= j <= m)
从高位向低位暴力消元,每次消去比他高的变量。
如 dp[i] = a1 * dp[i - 1] + a2 * dp[i - 2] …… am * dp[i - m]。
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 50002
using namespace std;
double a[MAX][],p[MAX][],consts[MAX],q;
int c[MAX],cc,l[MAX],r[MAX];
int main(){
int n,m,i,j,k;
while(scanf("%d%d",&n,&m)&&(n+m)){
memset(a,,sizeof(a));
for(i=;i<=n;i++){
cc=;
for(j=;j<=m;j++){
scanf("%d",&c[j]);
cc+=c[j];
}
p[i][m]=1.0;
for(j=-m;j<;j++){
p[i][j+m]=0.3*c[-j]/cc;
if(i+j>=) p[i][m]-=p[i][j+m];
}
for(j=;j<=m;j++){
p[i][j+m]=0.7*c[j]/cc;
if(i+j<=n) p[i][m]-=p[i][j+m];
}
}
for(i=n-;i>=;i--){
l[i]=max(,i-m);//记录该方程的下界
r[i]=min(n,i+m);//记录该方程的上界
for(j=;j<r[i]-l[i]+;j++)
a[i][j]=p[i][l[i]+j-i+m];
consts[i]=1.0;//记录常数
for(j=r[i];j>i;j--){//将比i高位的变量消去
if(j==n) a[i][j-l[i]]=;//dp[n]=0
else{
q=a[i][j-l[i]];
if(fabs(q)<1e-) continue;//从i到j的概率为0,不需计算
for(k=;k<j-l[j];k++)//将相应变量的系数相加
a[i][k+l[j]-l[i]]+=a[j][k]*q;
consts[i]+=consts[j]*q;//将常数项相加
}
}
q=1.0-a[i][i-l[i]];
for(j=;j<r[i]-l[i]+;j++)
a[i][j]/=q;
a[i][i-l[i]]=;
consts[i]/=q;
}
printf("%.2lf\n",consts[]);
}
return ;
}
最新文章
- Asp.net mvc自定义Filter简单使用
- UpdatePanel里的Repeater和DropDownList
- php 分页查询
- js 正则表达式 手机号
- Multipart Upload with HttpClient 4--reference
- delphi 编写一个dos 窗体
- SGU 152.Making round
- Rotation Lock Puzzle
- QThread 与 QObject的关系
- Windows免密码远程桌面
- Python代码分析工具之dis模块
- Flask 页面缓存逻辑,jinja2 过滤器,测试器
- Cocos2D中的ObjectAL简介
- wx.request 使用数据
- 在IDEA中实战Git-branch
- Python2.7-内置类型
- 复习ing
- CSU 2005 Nearest Maintenance Point(最短路+bitset)
- Vue的配置
- MySql计算两个日期的时间差函数
热门文章
- Windows phone 中一些实用的控件
- js 字符串“123”,变成整数123,不用parseInt 函数
- HTML5-Video &; Audio
- VMware Workstation中linux(centos)与windows7共享文件夹
- 基础学习总结(五)---baseAdapter、ContentProvider
- 51nod1269 B君的圆锥
- CLR via C# 混合线程同步构造
- Oracle 摘去数据块的面纱
- Arrays.asList的使用及异常问题
- Android中关于日期时间与时区的使用总结