概率与期望的一些问题整理

---恢复内容开始---

考了几个期望...一点都不会做...然后就补一补...还是找vjudge上的一些专题做...一些水题,放一起感觉好一点.

Lightoj 1027

  题意:

    n个门,每个门有一个权值并有两种选择走出去或者只是耗费时间,求期望走出去的时间.

  SOL:

    第一题还是要打一下的...

    很显然我们可以列一个方程然后解一下...

    就没了...

  

/*==========================================================================
# Last modified: 2016-03-22 18:19
# Filename: 3680.cpp
# Description: 
==========================================================================*/
#define me AcrossTheSky 
#include <cstdio> 
#include <cmath> 
#include <ctime> 
#include <string> 
#include <cstring> 
#include <cstdlib> 
#include <iostream> 
#include <algorithm> 
  
#include <set> 
#include <map> 
#include <stack> 
#include <queue> 
#include <vector> 
 
#define lowbit(x) (x)&(-x) 
#define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++) 
#define FORP(i,a,b) for(int i=(a);i<=(b);i++) 
#define FORM(i,a,b) for(int i=(a);i>=(b);i--) 
#define ls(a,b) (((a)+(b)) << 1) 
#define rs(a,b) (((a)+(b)) >> 1) 
#define getlc(a) ch[(a)][0] 
#define getrc(a) ch[(a)][1] 
 
#define maxn 10010
#define maxm 100000 
#define pi 3.1415926535898 
#define _e 2.718281828459 
#define INF 1070000000 
using namespace std; 
typedef long long ll; 
typedef unsigned long long ull; 
 
template<class T> inline 
void read(T& num) { 
    bool start=false,neg=false; 
    char c; 
    num=0; 
    while((c=getchar())!=EOF) { 
        if(c=='-') start=neg=true; 
        else if(c>='0' && c<='9') { 
            start=true; 
            num=num*10+c-'0'; 
        } else if(start) break; 
    } 
    if(neg) num=-num; 
} 
/*==================split line==================*/
int a[maxn];
int gcd(int x,int y){return y==0?x:gcd(y,x%y);}
int main(){
	//freopen("a.in","r",stdin);
	int cas; read(cas);
	FORP(i,1,cas){
		printf("Case %d: ",i);
		int n; read(n);
		int t=0,sum=0;
		FORP(i,1,n) {
			read(a[i]);
			t+=abs(a[i]);
			if (a[i]<=0) sum++;
		}
		int down=n-sum;
		if (down==0) printf("inf\n");
		else {
			int d=gcd(t,down);
			printf("%d/%d\n",t/d,down/d);
		}
	}
}

 lightoj 1030

  题意:

    以前见过貌似还写过...倒推很丝帛...代码别人的贴不贴呢...不贴好了...

Lightoj 1038

  题意:

    白书上的题,感觉跟第一题没什么不一样,不写了...

Lightoj 1079  

  题意:

    抢银行;

    现在给出一个概率p,和银行的个数n;  

    接下去给出每个银行可以抢到的钱,还有抢劫这个银行被抓的概率;

    问在被抓的概率小于等于p的情况下,最多抢到多少钱;

  SOL:

    刚看到还有点懵逼,感觉要不要撞鸭什么的...发现n等于100,有点傻了...想半天没想法看了题解...然后发现钱不超过1w....

    那么就可以背包搞了...

    这题终于拜托了前面的sb形象...我们把状态记为前i个银行抢j的钱被捕的概率,然后DP即可

  不想打代码QAQ...

Lightoj 1248

  题意:给一个n个面的骰子,每个面点数出现的概率相同,求扔出所有面的期望次数。

  SOL:

    感觉画风有点像做的那个鬼畜题....

    期望大法...一定要倒着推...

    设dp[i]为已经扔出了i个不同面值,还要扔dp[i]次才能扔出n个不同面的期望次数,显然dp[n] = 0,要求dp[0]

              则dp[i] = 1+ i/n * dp[i] + (n-i)/n * dp[i+1],本来要扔的一次加上各个状态转移的期望值=>dp[i] = n / (n-i) + dp[i+1]

    然而还是感觉丝帛好多...

Lightoj 1265

  题意:

 

  在孤岛生存, 孤岛上有t头老虎,d头鹿, 每天会出现随机出现两只生物(包括你自己), 如果出现了一只老虎,那么你将被吃掉, 如果两只老虎, 则两只老虎会同归于尽,其他情况你都将生存下来。

 

  当孤岛上没有老虎时, 就视为你生存成功。

 

  问你生存成功的最大概率。

  sol:

    感觉没什么好说的...代码比较直观...

  Code:

    

#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <set>
#include <map>
#include <list>
#include <queue>
#include <string>
#include <vector>
#include <fstream>
#include <iterator>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define eps 1e-6
#define MAXN 1010
int t, d;
double solve()
{
    double ans = 0.0;
    if(t % 2 == 1) return ans;
    ans = 1.0;
    if(t == 0) return ans;

    int x = t;
    while(x)
    {
        ans *= 1.0 * (x - 1.0) / (x + 1.0);
        x -= 2;
    }
    return ans;
}

int main()
{
    int T;
    int kcase = 0;
    scanf("%d", &T);
    while(T --)
    {
        scanf("%d %d", &t, &d);
        printf("Case %d: %.7lf\n", ++ kcase, solve());
    }
    return 0;
}

 

posted @ 2016-03-31 20:05  YCuangWhen  阅读(431)  评论(0编辑  收藏  举报