---恢复内容开始---
考了几个期望...一点都不会做...然后就补一补...还是找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
题意:
白书上的题,感觉跟第一题没什么不一样,不写了...
题意:
抢银行;
现在给出一个概率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;
}
原文:http://www.cnblogs.com/YCuangWhen/p/5342534.html