题目大意:给出长度为n的一条隧道,每个位置都有一定数量的财宝。给你一枚骰子,roll到几点就前进几步,如果即将到达的地方超过了这条隧道长度,就重新roll一次,走到n点结束。求这个过程能收获多少财宝。
题目思路:很明显问题是求期望值的。
期望值公式:
E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) (p为概率,x为某一点价值)。
具体看代码
#include#include #include #include #include #include #include #include #include #define INF 0x3f3f3f3f#define MAX 1000005#define mod 1000000007using namespace std;double Toss[MAX];//到达某一点的概率int val[MAX];double Roll(int n){ if(n==1) return val[1]*1.0; int i,j; double sum=0,k; sum=val[1]+val[n];//1点和n点必定到达 memset(Toss,0,sizeof(Toss)); Toss[1]=1; for(i=1;i