【期望dp】Lightoj 1027 A Dangerous Maze

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84305#problem/A

一道很好的概率期望题目,没用到dp不过,再次理解了统计平均(期望E)

/*
light_oj 1027  期望DP

并没有什么递推
题意:
      n个传送门,m个可以逃离,其他的
求解:
      E表示成功逃离的时间期望,E1表示逃离时间的统计平均,E2表示返回原地的统计平均
      p表示成功逃离的概率,p = m/n
      事件可分解为一次性成功逃离,返回原地后再逃离,利用全期望公式有
      E = p*E1 + (1-p)*(E2 + E)
      (返回原地消耗E2的时间,再逃离还是要花费E)
      E1 = s1/m, E2 = s2/(n-m);s1是正的时间和,s2是负的时间和取绝对值
      整理得到E = (s1 + s2 )/m,gcd求最大公约数表示下就可以了
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<sstream>
#define eps 1e-9
#define pi acos(-1)
#define long long ll
#define M 10
#define N 1010
using namespace std;
const int _max = 1e5 + 10;

int x,n,m,s1,s2,s;

int gcd(int a,int b){return b?gcd(b,a%b):a;}

int main()
{
   #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   #endif // ONLINE_JUDGE
   int T;cin>>T;int cnt =1;
   while(T--){
    scanf("%d",&n);
    s1 = s2 = m = 0;
    for(int i = 0; i < n; ++ i){
        scanf("%d",&x);
        if(x>0) s1+=x,m++;
        else s2+=abs(x);
    }
    printf("Case %d: ",cnt++);
    if(!s1) {puts("inf");continue;}
    s = s1 + s2;
    int d = gcd(s,m);
    printf("%d/%d\n",s/d,m/d);
   }
   return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值