HDU4465 Candy

题意:有两个箱子,里面放有相同数量的糖果,每次从第一个箱子里拿的概率是p,从第二个箱子里拿的是1-p,问拿完一个箱子,另一个箱子剩下糖果数量的期望。

第一眼看到这题以为是概率DP,然后推了下发现不是,就一个很好推的公式,但是那个组合数太大,无法求出。。然后就没有然后了。。

公式是C(n+i,i)*(p^(n+1)*(1-p)^i+p^i*(1-p)^(n+1))*(n-i)。。

n+1次方的原因是,先取完了一个箱子的n个,然后再去取一次,发现这个箱子没有了才看另一个箱子的数量。。

组合数求不出。。都取对数就可以求了。。

#include
#include
#include
#include
using namespace std;
const int MAXN=200010;
double A[MAXN<<1];
void init()
{
    int i;
    A[0]=0;
    for(i=1;i<=400010;i++)
    {
        A[i]=A[i-1]+log(i*1.0);
    }
}
double logc(int n,int m)
{
    return A[n]-A[m]-A[n-m];
}
int main()
{
    int n,i,flag=1;
    double p;
    init();
    while(scanf("%d%lf",&n,&p)==2)
    {
        double p1=log(p);
        double p2=log(1-p);
        double ans=0;
        for(i=0;i


你可能感兴趣的:(数学)