UVA 10417 Gift Exchanging

来源:互联网 发布:推理电影 知乎 编辑:程序博客网 时间:2024/06/06 05:19
题意:对于概率很无解,参考:点击打开链接
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;double p[20][20];int num[10];int N;double ans;void dfs(int cur,double cp){    if (cur == N){        ans += cp;        return;    }    for (int i = 0; i < 5; i++){        if (num[i] == 0)            continue;        if (p[cur][i] == 0.0)            continue;        num[i]--;        dfs(cur+1,cp*p[cur][i]);        num[i]++;    }}int main(){    int t;    scanf("%d",&t);    while (t--){        scanf("%d",&N);        for (int i = 0; i < 5; i++)            scanf("%d",&num[i]);        for (int i = 0; i < N; i++)            for (int j = 0; j < 5; j++)                scanf("%lf",&p[i][j]);        double Max = 0.0;        int id;        double sum = 0.0;        for (int i = 0; i < 5; i++){            if (num[i] == 0)                continue;            num[i]--;            ans = 0.0;            dfs(1,1.0);            ans *= p[0][i];            sum += ans;            num[i]++;            if (Max < ans/num[i]){                Max = ans/num[i];                id = i;            }        }        printf("%d %.3lf\n",id+1,Max/sum);    }    return 0;}