【期望dp】Lightoj 1027 A Dangerous Maze
阿新 • • 發佈:2019-02-01
一道很好的概率期望題目,沒用到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; }