luogu2473 [SCOI2008]奖励关

Posted poorpool

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu2473 [SCOI2008]奖励关相关的知识,希望对你有一定的参考价值。

题解参照这里
每个研究完记得乘一个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]奖励关的主要内容,如果未能解决你的问题,请参考以下文章

P2473 || SCOI2008 奖励关 //状压&&期望DP

BZOJ1076:[SCOI2008]奖励关——题解

P2473 [SCOI2008]奖励关(状压+期望dp)

[SCOI2008]奖励关

bzoj1076: [SCOI2008]奖励关

1076: [SCOI2008]奖励关