暑末 Day1 Face

来源:互联网 发布:nginx点播系统 编辑:程序博客网 时间:2024/05/16 15:44
//伪概率DP#include<bits/stdc++.h>using namespace std;int hm, high, low, n, m, c, a, b, t;int delta;double dp[810][16001], sum[16001];inline int read(){    int num = 0;    char c;    while((c = getchar()) == ' ' || c == '\r' || c == '\n');    num = c - '0';    while(isdigit(c = getchar()))   num = num*10 + c - '0';    return num;}inline void getInit(){    memset(dp, 0, sizeof(dp));}int main(){    t = read();    while(t--){        m = read(); c = read();        n = read(); a = read();        b = read();        getInit();        delta = b - a + 1;        hm = m + c;        low = n * a;        high = n * b;        if(high < m){            printf("0.00000\n");            continue;        }        else if(low > hm){            printf("0.00000\n");            continue;        }        for(int i = a; i <= b; i++) dp[1][i] = 1;        for(int i = 1; i <= n; i++){            dp[i][a*i] = 1;            dp[i][b*i] = 1;        }           for(int i = 2; i <= n; i++){            memset(sum, 0, sizeof(sum));            for(int j = i*a-b; j <= i*b-a; j++) sum[j] = sum[j-1] + dp[i-1][j];            for(int j = i*a+1; j <= i*b-1; j++)                //for(int k = a; k <= b; k++)                    //if(j - k >= 0)                    dp[i][j] += sum[j-a] - sum[j-b-1]; //dp[i-1][j-k];        }        double ans = 0;        long long final = 1;        for(int i = 1; i <= n; i++) final *= (long long)delta;        for(int i = m; i <= hm; i++)    ans += dp[n][i];        ans /= (double)final;        printf("%.5lf\n", ans);    }    return 0;}
原创粉丝点击