• hdu 4159 Indomie (DP,数学概率)


    推出数学公式:

    #include<stdio.h>
    #include<string.h>
    __int64 C(int m,int n)
    {
        __int64 tmp=1;
        if(m>(n-m))m=n-m;
        for(int i=1; i<=m; i++)
        {
            tmp*=(n--);
            tmp/=i;
        }
        return tmp;
    }
    int main()
    {
        int n,s;
        int i,j,k;
        //printf("#%I64d
    ",C(10,50));
        while(scanf("%d%d",&n,&s)!=EOF)
        {
            double sum=0,tsum;
            if(s>n)
            {
                printf("100.00000
    ");
                continue;
            }
            if(s==0)
                printf("0.00000
    ");
            else
            {
                for(i=0; i<=s; i++)
                {
                    sum+=(double)C(i,n)*((__int64)1<<(n-i));
                    if(i==s-1) tsum=sum;
                }
                printf("%.5lf
    ",100.0*tsum/sum);
            }
        }
        return 0;
    }

    反面推出数学公式(超__int64):

    #include<stdio.h>
    #include<math.h>
    
    __int64 C(int m,int n)
    {
        __int64 tmp=1;
        if(m>(n-m))m=n-m;
        for(int i=1;i<=m;i++)
        {
            tmp*=(n--);
            tmp/=i;
        }
        return tmp;
    }
    __int64 Sum(int n,int s)
    {
        __int64 tmp=0,ret=1;
        for(int i=0;i<n-s;i++)
        {
            tmp+=(C(i,n)*ret);
            ret*=2;
        }
        return tmp;
    }
    int main()
    {
        int n,s;
        //printf("%d",C(25,50));
        while(scanf("%d%d",&n,&s)!=EOF)
        {
            if(n<s)
            {
                printf("100.00000
    ");
                continue;
            }
            if(s==0)printf("0.00000
    ");
            else
            {
                //printf("%lf
    ",pow(3,n));
                printf("%.5lf
    ",100-100.0*C(s,n)*pow(2,n-s)/(pow(3,n)-Sum(n,s)));
            }
        }
        return 0;
    }
    View Code

    Dp解法:

    转载:

    //f(a,b)=2*f(a-1,b)+f(a-1,b-1)是公式
    #include<stdio.h>
    double p[51][51],o[51][51],k[51][51];
    int main()
    {
        int a,b,c,d;
        p[1][0]=2;p[1][1]=3;
        for(a=1;a<=50;a++)
        {
            o[a][0]=0;
            o[1][a]=2;
        }
        for(a=2;a<=50;a++)
        {
            p[a][0]=2*p[a-1][0];
            p[1][a]=3;
        }
        for(a=2;a<=50;a++)
        for(b=1;b<=50;b++)
        {
            p[a][b]=2*p[a-1][b]+p[a-1][b-1];
        }
       for(a=2;a<=50;a++)
        for(b=1;b<=50;b++)
        {
            if(b>=a)
            o[a][b]=3*p[a-1][b-1]-1;
            else
            o[a][b]=2*o[a-1][b]+o[a-1][b-1];
        }
        for(a=1;a<=50;a++)
        for(b=1;b<=50;b++)
        {
            k[a][b]=o[a][b]/p[a][b]*100;
        }
        while(scanf("%d%d",&a,&b)!=EOF)
        {
         if(b>a)
         printf("100.00000
    ");
         else
        printf("%.5lf
    ",k[a][b]);
        }
        return 0;
    }
    View Code
    #include<stdio.h>
    #include<string.h>
    #define MM 1000000000000000.0
    double dp[55][55];
    int main()
    {
        int n,s,i,j;
        while(scanf("%d%d",&n,&s)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            if(s==0)
            {
                printf("0.00000
    ");
                continue;
            }
            dp[1][s] = 2;
            dp[1][s-1] = 1;
            for(i = 2; i <= n ; i++)
                for(j = 0 ; j <= s ; j++)
                {
                    dp[i][j] = dp[i-1][j]*2+dp[i-1][j+1];
                }
            double ss=0;
            for(i = 0; i <= s ; i++)
            {
                ss+=dp[n][i]/MM;
            }
            dp[n][0] = dp[n][0]/MM;
            double x = 1-1.0*dp[n][0]/ss;
            printf("%.5lf
    ",x*100);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    mongo dump
    http请求
    DT-06 For AT
    DT-06 For Homekit
    DT-06 For MQTT
    利用DoHome APP和音箱控制小车的实验参考步骤
    利用DoHome APP和音箱控制LED灯实验参考步骤
    利用DoHome APP和音箱控制继电器通断电实验参考步骤
    HTML5学习笔记1
    HTML5学习第四天
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3355455.html
Copyright © 2020-2023  润新知