【概率DP】 LightOJ 1027 A Dangerous Maze

来源:互联网 发布:bi工程师和数据分析 编辑:程序博客网 时间:2024/05/17 15:40

题意:N个门,接下有N个数

正数X能花费X时间逃出迷宫,负数Y表示-Y时间重新选,选每个门的概率一样

求花费的时间的期望

ANS= P1*X+(1-P2)*(Y+ ANS);

X表示正数平均值

Y表示abs(负数)平均值

#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <iostream>#include <algorithm>#include <sstream>#include <cmath>using namespace std;#include <queue>#include <stack>#include <set>#include <vector>#include <deque>#include <map>#define cler(arr, val)    memset(arr, val, sizeof(arr))#pragma comment(linker, "/STACK:102400000,102400000")typedef long long  LL;const int MAXN = 302020;const int MAXM = 1602020;const int INF = 0x3f3f3f3f;const int mod = 1000000007;const double eps = 1e-4;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int gcd(int x,int y){    if(y==0) return x;    else return gcd(y,x%y);}int main(){    int cas=1,t,n,a[200];#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);//      freopen("out.txt", "w", stdout);#endif    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int sum1,sum2,x1,x2;        sum1=sum2=x1=x2=0;        for(int i=0;i<n;i++)        {            scanf("%d",&a[i]);            if(a[i]>0) sum1+=a[i],x1++;            else sum2-=a[i],x2++;        }        int ans=sum1+sum2;        int g=gcd(ans,x1);        if(sum1==0)            printf("Case %d: inf\n",cas++);        else printf("Case %d: %d/%d\n",cas++,ans/g,x1/g);    }    return 0;}


0 0
原创粉丝点击