欢迎来到SFWR的博客

P2473 [SCOI2008]奖励关

 

——————————————————————————————————————————————————————-

结合状压与期望的一个题,很有意思,结合期望倒推的特点

借用@xyz32768的题解记录一下这个题的倒退思路

——————————————————————————————————————————————————————————————

#include<bits/stdc++.h>
using namespace std;
int val[80],f[80],a,k,n;
double dp[105][(1<<15)+5];
int main()
{
    cin>>k>>n;
    for(int i=1;i<=n;i++)
    {
    cin>>val[i];
    while (1)
    {cin>>a;if(!a)break;
    f[i]+=(1<<(a-1));    
    }}
    for(int i=k;i>=1;i--)
    for(int j=0;j<(1<<n);j++)
    {
        for(int t=1;t<=n;t++)
        if((j&f[t])==f[t])
        dp[i][j]+=max(dp[i+1][j],dp[i+1][j|(1<<(t-1))]+val[t]);
        else dp[i][j]+=dp[i+1][j];
        dp[i][j]/=n;
    }    
    printf("%.6lf",dp[1][0]);
}

 

posted @ 2019-08-02 20:53  SFWR  Views(116)  Comments(0Edit  收藏  举报