首页 > 其他 > 详细

luogu2473 [SCOI2008]奖励关

时间:2018-01-03 13:41:38      阅读:186      评论:0      收藏:0      [点我收藏+]

题解参照这里
每个研究完记得乘一个1/n,这是乘了概率。

#include <iostream>
#include <cstdio>
using namespace std;
double dp[105][33005];
int n, k, p[25], d[25], uu;
int main(){
    cin>>k>>n;
    for(int i=1; i<=n; i++){
        scanf("%d", &p[i]);
        scanf("%d", &uu);
        while(uu){
            d[i] |= 1<<(uu-1);
            scanf("%d", &uu);
        }
    }
    for(int i=k; i>=1; i--)
        for(int j=0; j<(1<<n); j++){
            for(int l=1; l<=n; l++)
                if((j&d[l])==d[l])
                    dp[i][j] += max(dp[i+1][j], dp[i+1][j|(1<<(l-1))]+p[l]);
                else
                    dp[i][j] += dp[i+1][j];
            dp[i][j] /= n;
        }
    printf("%.6lf\n", dp[1][0]);
    return 0;
}

luogu2473 [SCOI2008]奖励关

原文:https://www.cnblogs.com/poorpool/p/8183040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!