HDU4465 Candy

1096 ワード

标题:2つの箱があって、中には同じ数のキャンディが入っていて、毎回1つ目の箱から取る確率はpで、2つ目の箱から取るのは1-pで、1つの箱を持って、もう1つの箱にキャンディの数の期待を残します.
この問題を一目で見て確率DPだと思って、それから押して違うことに気づいて、とても良い数式ですが、その組み合わせ数が大きすぎて、求めることができません.そしてその後はありません.の
式はC(n+i,i)*(p^(n+1)*(1−p)^i+p^i*(1−p)^(n+1)*(n−i)である.
n+1次の理由は、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